$ wpdb-> update или $ wpdb-> insert приводит к добавлению слэша перед кавычками - PullRequest
19 голосов
/ 08 сентября 2011

Этот вопрос был задан несколько раз в разных местах, но я не нашел однозначного и ясного ответа.Большинство решений включают людей, которые говорят, что нужно отключить магические кавычки в файле 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 - удаление Escape-инъекций SQL , но это никогда не решалось, кроме «отключить магические кавычки»

Ответы [ 3 ]

49 голосов
/ 08 сентября 2011

Потратив на это день, ответ будет следующим:

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 не будет добавлять косые черты перед любыми кавычками.

6 голосов
/ 18 января 2012

немного больше информации - 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 голосов
/ 01 июля 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...