Wpdb INSERT插入的数据与数据库中显示的数据不同。

时间:2016-02-17 作者:Neeraj Kumar Jha

我进行了此插入查询:

$insertsuccess = $wpdb->insert( 
    \'compservices\', 
    array( 
                \'orderId\'=> $orderID,
        \'orderedTime\' => $date, 
        \'useremail\' => $customerEmail,
        \'address\' => $address , 
        \'mobile\' => $mobile ,
        \'servicecenter\' => $servicecentername ,
                \'timeslot\'=> $timeSlot,
                \'preferredlanguage\'=> $preferredLanguage,
                \'status\'=> $orderStatus,
                \'completedDate\'=> $orderCompletionDate,
                \'userissue\'=> $userIssue ,
                \'userproduct\'=> $userProduct
    ), 
    array( 
        \'%s\',
        \'%s\', 
        \'%s\',
        \'%s\',
        \'%s\',
        \'%s\',
        \'%s\', 
        \'%s\',
        \'%s\',
        \'%s\',
        \'%s\',
        \'%s\'

    ) 
);
var_dump( $wpdb->last_query );

//echo $wpdb->insert_id;
//$wpdb->print_error();


if($insertsuccess) {
return true;
} else {
 return false;
}
wpdb->last\\u查询的输出为:

string(423) "INSERT INTO `compservices` (`orderId`, `orderedTime`, `useremail`, `address`, `mobile`, `servicecenter`, `timeslot`, `preferredlanguage`, `status`, `completedDate`, `userissue`, `userproduct`) VALUES (\'GV2016021757\', \'2016-02-17 23:20\', \'[email protected]\', \'jnerjnmejnrerr\', \'9999999999\', \'GVONE\', \'2016-02-18 - 09 AM to 12 PM\', \'ENG\', \'Ordered\', NULL, \'\', \'kdnsjknjer\')"
实际查询为

string(423) "INSERT INTO `compservices` (`orderId`, `orderedTime`, `useremail`, `address`, `mobile`, `servicecenter`, `timeslot`, `preferredlanguage`, `status`, `completedDate`, `userissue`, `userproduct`) VALUES (\'GV2016021757\', \'2016-02-17 23:20\', \'[email protected]\', \'jnerjnmejnrerr\', \'9999999999\', \'GVONE\', \'2016-02-18 - 09 AM to 12 PM\', \'ENG\', \'Ordered\', NULL, \'<script>alert("hello")</script>\', \'kdnsjknjer\')"
插入的数据为

所有相同的数据以及脚本标记也存在:

<script>alert(\\\'hello\\\')</script>
预期wpdb->插入将清理脚本标记并将其删除。它在wpdb->last\\u查询中显示正确。但数据库中的数据有脚本标记。

我不知道为什么会这样。

1 个回复
SO网友:TheDeadMedic

wpdb::insert 只会确保安全插入数据(即防止SQL注入)。会的not 清理数据(例如剥离某些/所有HTML),这取决于您自己。

您可以使用wp_strip_all_tags, 删除所有HTML,或wp_kses, 这是一个复杂的库,用于删除某些(x)HTML标记&;实体。

wpdb->last\\u查询的输出为:

你被骗了!您没有看到的原因<script>alert(\\\'hello\\\')</script> 是因为输出时浏览器正在对其进行解析-如果退出调试输出,您将看到两者是相同的:

<?php echo esc_html( $wpdb->last_query ) ?>

相关推荐

$wpdb->get_row返回什么?

由于插件中的调试和错误查找,我有一个简短的问题。$wpdb->;如果没有结果,返回get\\u row()?文件说明:(array|object|null|void) Database query result in format specified by $output or null on failure. 但当查看源代码时,它似乎返回了;null“;。。。如果您能快速提供帮助,我将不胜感激,我一直认为它会返回一个空数组,但我可能弄错了!