Wordpress:使用$ wpdb-> get_results时如何取消结果?

时间:2012-08-19 12:50:03

标签: wordpress escaping wpdb

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

问题是$wpdb->insert似乎正在逃避输入。例如,a"b在数据库中保存为a\"b。但是,$wpdb->get_results似乎没有将a\"b转回a"b

这是设计正确的行为吗?

我应该手动取消$wpdb->get_results的结果吗? (对此有什么作用?)

2 个答案:

答案 0 :(得分:6)

$wpdb->insert()$wpdb->prepare()将转义数据以阻止SQL injection attacks$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

答案 1 :(得分: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'
            ) 
        );