【发布时间】:2022-07-25 13:49:03
【问题描述】:
我有如下图所示的定价规则表。
我想搜索价格中的数字,如表值模式中所示。 方法, 如果 $ValueFromUser = 700000 或 123222 或 1234333($ValueFromUser 数据长度为 7)
对于 7000000 的值,查询应该返回价格 30000,1232222 它应该返回 1999.99,对于 1234333 它应该返回 5000。
我的查询是
SELECT price, description
FROM pricing_rules
where status='1'
AND (%u LIKE CONCAT('%',value)
AND rule_condition='end'),$ValueFromUser)
当我搜索 7000000 它与规则值冲突 000 它应该返回规则值的价格 000000 但它给出的价格来自规则值 000 199.99。 1230000 也发生了同样的事情。
谢谢
【问题讨论】:
-
您的脚本对SQL Injection Attack 开放。即使是if you are escaping inputs, its not safe!,您也应该始终在
MYSQLI_或PDOAPI 中使用prepared parameterized statements,而不是将用户提供的值连接到查询中。永远不要相信任何用户输入! -
感谢 @RiggsFolly 的 sugetion,此查询仅用于测试我稍后会更改它。
-
数字模式似乎与它无关,您需要测试 ='end' 和 value = '0000000' 作为字符串..
-
用户可以是 7000000, 8000000。它还会检查其他值,例如 1230000。
-
为什么
$_POST['search_number']不在单引号中,使其成为文本文字?如果您的 SQL 语法中有“裸”000000,那么 MySQL 会将其视为0。