Wordpress:如何在使用 $wpdb->get_results 时转义结果?

问题描述 投票:0回答:2

要向数据库添加新行,我使用

$wpdb->insert
,并获取行,我使用
$wpdb->get_results

问题在于

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

这是设计上正确的行为吗?

我应该手动取消转义

$wpdb->get_results
的结果吗? (这个的正确功能是什么?)

php wordpress escaping
2个回答
6
投票

$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


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'
            ) 
        );
© www.soinside.com 2019 - 2024. All rights reserved.