Этот вопрос задавался несколько раз в разных местах, но я не нашел однозначного и ясного ответа. Большинство решений включают людей, говорящих, чтобы отключить 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, но он никогда не решался за исключением «отключить магические кавычки»,
Проведя день на этом, ответ следующий:
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 не будет добавлять косые черты перед кавычками.
немного больше информации – 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 ); }
WordPress игнорирует встроенную настройку кавычек php и значение 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 делает это, потому что слишком много кода ядра и плагина основывается на цитируемых цитатах, поэтому отключение кавычек на суперглабильных (как это делается в примерах «Основной пример» и «Хорошая практика кодирования» выше), вероятно, вызывают дыры в безопасности.
http://codex.wordpress.org/Function_Reference/stripslashes_deep