阅读了大量有关准备好的语句,我读到的一件事是,如果您使用全局 $wpdb 类,则不需要预先清理。
下面的代码使用了 $wpdb 类,想知道下面的代码是否安全,或者是否应该引入准备好的语句???
$products = $wpdb->get_results( "SELECT `cart`.`prodid`,
`cart`.`name`
FROM `" . WPSC_TABLE_CART_CONTENTS . "` AS `cart`
INNER JOIN `" . WPSC_TABLE_PURCHASE_LOGS . "` AS `logs`
ON `cart`.`purchaseid` = `logs`.`id`
WHERE `logs`.`processed` >= 2
AND `logs`.`date` >= " . $months[0] . "
GROUP BY `cart`.`prodid`
ORDER BY SUM(`cart`.`price` * `cart`.`quantity`) DESC
LIMIT 4", ARRAY_A ); //get 4 products with top income in 4 last months.
上面的代码是不是应该改成下面的?
$products = $wpdb->get_results( $wpdb->prepare( "SELECT `cart`.`prodid`,
`cart`.`name`
FROM `%s` AS `cart`
INNER JOIN `%s` AS `logs`
ON `cart`.`purchaseid` = `logs`.`id`
WHERE `logs`.`processed` >= 2
AND `logs`.`date` >= %s
GROUP BY `cart`.`prodid`
ORDER BY SUM(`cart`.`price` * `cart`.`quantity`) DESC
LIMIT 4", WPSC_TABLE_CART_CONTENTS, WPSC_TABLE_PURCHASE_LOGS, $months[0]), ARRAY_A )); //get 4 products with top income in 4 last months.
阅读 wpdb 类,并介绍一个准备好的语句。
您只需要对用户输入查询执行此操作,以避免任何代码注入。例如,如果 $months[0] 来自某个用户输入参数,当然,使用准备语句,但所有变量都是硬编码的,没有必要。