要向数据库添加新行,我使用
$wpdb->insert
,并获取行,我使用 $wpdb->get_results
。
问题在于
$wpdb->insert
似乎正在转义输入。例如,a"b
在数据库中保存为 a\"b
。但是,$wpdb->get_results
似乎并没有逃回a\"b
到a"b
。
这是设计上正确的行为吗?
我应该手动取消转义
$wpdb->get_results
的结果吗? (这个的正确功能是什么?)
$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
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'
)
);