【问题标题】:Find the number patters from MySql datatable从 MySql 数据表中查找数字模式
【发布时间】: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_PDO API 中使用prepared parameterized statements,而不是将用户提供的值连接到查询中。永远不要相信任何用户输入!
  • 感谢 @RiggsFolly 的 sugetion,此查询仅用于测试我稍后会更改它。
  • 数字模式似乎与它无关,您需要测试 ='end' 和 value = '0000000' 作为字符串..
  • 用户可以是 7000000, 8000000。它还会检查其他值,例如 1230000。
  • 为什么$_POST['search_number'] 不在单引号中,使其成为文本文字?如果您的 SQL 语法中有“裸”000000,那么 MySQL 会将其视为0

标签: php mysql


【解决方案1】:

我认为您提出的案例的查询是:

SELECT price, description
FROM pricing_rules
WHERE status = '1'
AND value LIKE '%000000'
AND rule_condition = 'end'

通常是:

SELECT price, description 
FROM pricing_rules 
WHERE status = '1' 
AND value LIKE CONCAT('%', '" . $ValueFromUser . "')
AND rule_condition = 'end'

正如 cmets 中提到的,我建议使用 PDO 或其他东西来逃避 $ValueFromUser 并防止 SQL 注入。

【讨论】:

  • 我试过了,但它不起作用,它返回 null。
猜你喜欢
  • 2016-12-19
  • 2011-05-28
  • 2016-03-27
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 2012-08-30
  • 2014-01-19
相关资源
最近更新 更多