如果您有复杂的、用户指定的 WHERE 子句并且您想使用 PDO 和 MySQL,那么最佳实践是什么?
我的用户需要能够为他们正在查询的表的一个或多个列指定一个或多个选择标准。在 PHP 端的 case 语句中有太多可能的组合无法预料。另一方面,允许他们直接输入标准会破坏参数化查询应该提供的针对 SQL 注入攻击的保护。
我正在尝试完全按照这个人所做的事情:
...除了我想成为一个优秀的小 codemonkey 并使用 PDO 而不是 php_mysql,并且不依赖字符串清理,除非这真的是人们在这种情况下所做的。
哦,还有一件事:
我想我可以将每个用户提供的标准作为一个[column, operator, value]
数组(例如[ "age", ">", "30" ]
)传递。我可以验证该数组的前两个元素分别与有效的列名和运算符名完全匹配,将最后一个元素强制为一个数字,然后将它们附加到 PHP 脚本中包含 WHERE 子句的字符串中。但是像这样的标准["fullname","like","M_rty M%cFly"]
呢?现在我又开始清理用户创建的字符串了,不是吗?