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