有没有办法限制php pdo execute()只运行第一个sql语句?限制php pdo execute()只运行第一个sql语句
例如运行
SELECT * FROM customer;DROP TABLE invoice
将返回所有客户,但它也将删除发票上的表。
我有一种情况,我需要从用户的一个完整的SQL语句,但它必须是一个SELECT,没有额外的东西。
我的例子只是许多可能被恶意输入的例子之一。它可能包含额外的DROP,UPDATE,DELETE语句等。
准备好的语句将简单地用值替换?它不会阻止传递给它的危险的SQL语句。
如果有限制php pdo execute()只运行第一个sql语句的方法,这不会有问题吗?
为什么你把那个声明那里,如果你不需要它?如果你担心注入,那么如果你的查询包含drop查询,并且如果你在某个变量中有这个查询,那么'preg_replace(“/(。)就是PDO中的Prepared语句会自己处理 –
。 *?)DROP(。*)/“,”$ 1“,”SELECT * FROM customer; DROP TABLE invoice “);'如果删除查询出现在该查询中,将删除查询 –
@ user790454 - 如果选择子字符串或者插入一个包含单词drop的子串。 – Scopey