限制php pdo execute()只运行第一个sql语句

时间:2014-05-22 04:11:01

标签: php sql pdo

有没有办法限制php pdo execute()只运行第一个sql语句?

例如正在运行

SELECT * FROM customer;DROP TABLE invoice

将返回所有客户,但也会删除发票表。

我的情况是我需要来自用户的整个SQL语句,但它必须是SELECT而不是其他任何内容。

我的例子只是可能被恶意输入的众多例子之一。它可能包括额外的DROP,UPDATE,DELETE语句等。

准备好的声明只会用值替换?s。它不会阻止危险的SQL状态传递给它。

如果有办法限制php pdo execute()只运行第一个sql语句,这不会有问题吗?

1 个答案:

答案 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);