1 回答
TA贡献2039条经验 获得超7个赞
首先,如果可以避免,切勿将日期直接插入 SQL 片段,即使您认为它们可能来自安全来源!
也就是说,查看生成的 SQL 查询(如果您还没有使用Debug Kit,则应该安装它),您将值括在双引号中,即生成的 SQL 将如下所示:
OrderProduct.actual_rate * "2"
在 ISO SQL 中,这意味着2
将用作标识符。
删除引号可以解决问题,但是您仍然将动态数据注入到 SQL 字符串中,如果可能的话应该避免这种情况,因此您应该更进一步并绑定值,以减少创建 SQL 的机会注入漏洞:
// ...
->select([
'product_name' => 'MAX(Products.product_name)',
'count' => 'SUM(OrderProduct.qty)',
'actual_rate' => 'SUM(OrderProduct.actual_rate)',
'revenue_based_actual_rate' => '(
SUM(
CASE
WHEN PaymentMethods.payment_gateway = \'nicepay\'
THEN (OrderProduct.actual_rate-((OrderProduct.actual_rate * :nicepayCommission)/100))
WHEN PaymentMethods.payment_gateway = \'paypal\'
THEN (OrderProduct.actual_rate-((OrderProduct.actual_rate * :paypalCommission)/100))
ELSE (OrderProduct.actual_rate)
END
)
)'
])
->bind(':nicepayCommission', $nicepay_commission, 'integer')
->bind(':paypalCommission', $paypal_commission, 'integer')
// ...
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报