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