向我使用的数据库添加新行$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()
函数设计用于一般地与 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
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'
)
);