要向数据库添加新行,我使用$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'
)
);