$ wpdb-> update или $wpdb-> вставить результаты с косой чертой, добавляемой перед кавычками
Этот вопрос задавался несколько раз в разных местах, но я не нашел однозначного и ясного ответа. Большинство решений включают людей, говорящих, чтобы отключить Magic Quotes в файле php.ini(что я и сделал) или изменить основные файлы WP.
В любом случае возникает вопрос: почему каждый раз, когда я использую $wpdb- > insert или $wpdb- > update, добавляется косая черта перед любой отдельной цитатой. Так, например:
Я съел клубнику становится Я съел клубнику
Вот пример кода, который я использовал:
$id = $_POST['id'];
$title = $_POST['title'];
$message = $_POST['message'];
$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id))
Та же проблема была и здесь: Выход из базы данных Wordpress - удалить SQL Injection Escapes, но она не была решена иначе, чем "отключить магические кавычки"
Ответы
Ответ 1
Проведя день на этом, ответ будет следующим:
Wordpress выходит в объявлении $_POST, а не в фактической вставке, что причудливо.
$id = stripslashes_deep($_POST['id']); //added stripslashes_deep which removes WP escaping.
$title = stripslashes_deep($_POST['title']);
$message = stripslashes_deep($_POST['message']);
$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id));
Выполнение этого будет означать, что WP не будет добавлять косые черты перед кавычками.
Ответ 2
немного больше информации - WordPress решил заставить людей думать, что они сходят с ума, добавив "волшебные кавычки", даже если вы отключили его, начиная с версии 3.0. Будет затронут любой доступ к $_REQUEST, $_GET, $_POST, $_COOKIE или $_SERVER. См. wp-includes/load.php
.
/* Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
* @since 3.0.0
*/
function wp_magic_quotes() {
// If already slashed, strip.
if ( get_magic_quotes_gpc() ) {
$_GET = stripslashes_deep( $_GET );
$_POST = stripslashes_deep( $_POST );
$_COOKIE = stripslashes_deep( $_COOKIE );
}
// Escape with wpdb.
$_GET = add_magic_quotes( $_GET );
$_POST = add_magic_quotes( $_POST );
$_COOKIE = add_magic_quotes( $_COOKIE );
$_SERVER = add_magic_quotes( $_SERVER );
// Force REQUEST to be GET + POST.
$_REQUEST = array_merge( $_GET, $_POST );
}
Ответ 3
WordPress игнорирует встроенную настройку кавычек php magic и значение of get_magic_quotes_gpc() и всегда будет добавлять магические кавычки (даже после функция удаляется из PHP в 5.4).
вы можете использовать это вместо
//replace $_POST with $POST
$POST = array_map( 'stripslashes_deep', $_POST);
$wpdb->insert(
'wp_mytable',
array(
'field_name' => $POST['field_name'],
'type' => $POST['type'],
'values' => serialize($POST['values']),
'unanswered_link' => $POST['unanswered_link'],
),
array(
'%s','%s','%s','%s'
)
);
WordPress делает это, потому что слишком много кода ядра и плагина полагайтесь на котировки, находящиеся там, поэтому отключение цитат на супер globals (как это делается в "Основном примере" и "Хорошем кодировании" Практика ", приведенные выше), вероятно, вызовут дыры в безопасности.
http://codex.wordpress.org/Function_Reference/stripslashes_deep