$ 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