WordPress的:如何使用$ wpdb-> get_results时未逸出的结果?(Wor

2019-09-21 08:42发布

要将新行添加到我使用的数据库$wpdb->insert ,并获得行我用$wpdb->get_results

问题是, $wpdb->insert似乎逃脱输入。 例如, a"b被保存为a\"b在数据库中。 但是, $wpdb->get_results似乎并没有反转义回a\"ba"b

这是由设计正确的行为?

我应该取消转义的结果$wpdb->get_results手动? (什么是该应有的功能?)

Answer 1:

$wpdb->insert()$wpdb->prepare()会逃跑数据,以防止SQL注入攻击 。 在$wpdb->get_results()函数被设计成与SQL一般工作SELECT语句,所以我相信一个事实,即斜线留在原地是故意的。 这使得数据的消费者是为了处理它。

由于$wpdb->get_results()功能可按返回数组stdClass对象,以消除所有列斜线每一行中,你必须通过行迭代,并通过运行PHP的每一行对象的属性stripslashes()在它的功能。

foreach( $quotes as &$quote ) {
    foreach( $quote as &$field ) {
        if ( is_string( $field ) )
            $field = stripslashes( $field );
    }
}

在wpdb-> get_results()的详细信息功能: http://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results



Answer 2:

http://codex.wordpress.org/Function_Reference/stripslashes_deep

//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: How to unescape the results when using $wpdb->get_results?