Skip to content

Commit f593506

Browse files
authored
Merge pull request #43 from mullnerz/master
Fix: Changed behaviour of esc_sql() in WordPress 4.8.3
2 parents a823ffa + 131201e commit f593506

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

features/search-replace-export.feature

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,3 +333,18 @@ Feature: Search / replace with file export
333333
wp_users display_name 0 PHP
334334
"""
335335
And STDERR should be empty
336+
337+
Scenario: Search / replace should remove placeholder escape on export
338+
Given a WP install
339+
And I run `wp post create --post_title=test-remove-placeholder-escape% --porcelain`
340+
Then save STDOUT as {POST_ID}
341+
342+
When I run `wp search-replace baz bar --export | grep test-remove-placeholder-escape`
343+
Then STDOUT should contain:
344+
"""
345+
'test-remove-placeholder-escape%'
346+
"""
347+
And STDOUT should not contain:
348+
"""
349+
'test-remove-placeholder-escape{'
350+
"""

src/Search_Replace_Command.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,14 @@ private function write_sql_row_fields( $table, $rows ) {
547547
if( ( $index % $export_insert_size == 0 && $index > 0 ) || $index == $count ) {
548548
$sql .= ";\n";
549549

550-
$sql = $wpdb->prepare( $sql, array_values( $values ) );
550+
if( method_exists( $wpdb, 'remove_placeholder_escape' ) ) {
551+
// since 4.8.3
552+
$sql = $wpdb->remove_placeholder_escape( $wpdb->prepare( $sql, array_values( $values ) ) );
553+
} else {
554+
// 4.8.2 or less
555+
$sql = $wpdb->prepare( $sql, array_values( $values ) );
556+
}
557+
551558
fwrite( $this->export_handle, $sql );
552559

553560
// If there is still rows to loop, reset $sql and $values variables.

0 commit comments

Comments
 (0)