有没有办法限制php pdo execute()只运行第一个sql语句?
例如正在运行
SELECT * FROM customer;DROP TABLE invoice
将返回所有客户,但也会删除发票表。
我的情况是我需要来自用户的整个SQL语句,但它必须是SELECT而不是其他任何内容。
我的例子只是可能被恶意输入的众多例子之一。它可能包括额外的DROP,UPDATE,DELETE语句等。
准备好的声明只会用值替换?s。它不会阻止危险的SQL状态传递给它。
如果有办法限制php pdo execute()只运行第一个sql语句,这不会有问题吗?
答案 0 :(得分:0)
如果您试图阻止SQL注入,那么prepare语句可以处理它。
你可以使用这样的东西来阻止SQL注入
$stmt = $db->prepare("SELECT * FROM table WHERE id=? AND name=?");
$stmt->bindValue(1, $id, PDO::PARAM_INT);
$stmt->bindValue(2, $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);