9

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

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

这是设计的正确行为吗?

我应该取消$wpdb->get_results手动的结果吗?(这个的正确功能是什么?)

4

2 回答 2

6

$wpdb->insert()并且$wpdb->prepare()会转义数据以防止SQL注入攻击。该$wpdb->get_results()函数设计用于一般地与 SQLSELECT语句一起使用,所以我相信斜杠留在原处的事实是有意的。这允许数据的消费者在必要时对其进行处理。

由于$wpdb->get_results()函数返回一个对象数组stdClass,为了删除每一行中所有列中的斜线,您必须遍历行,并遍历在其上运行 PHPstripslashes()函数的每个行对象的属性。

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

于 2012-09-12T04:40:55.707 回答
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'
            ) 
        );
于 2013-07-06T11:55:28.530 回答