有一个 pdo 包装器类使用以下方法关闭仿真或准备好的语句:
setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
我看到一些 sql 语句是使用标准的非参数化方法编写的,如下所示:
select * from table where name = '".$name."'.
即使使用了 pdo 包装器,这些语句是否也能防止 sql 注入(inject)?
最佳答案
你防止注入(inject)的想法是完全错误的。
它不是 PDO 只是因为它的存在(它可能会受到某些包装器的干扰)保护您的查询,但准备好的语句。
只要您使用的是准备好的语句,您的查询就是安全的,无论它是 PDO 还是包装器,甚至是糟糕的旧 mysql ext。
但是如果您直接将数据放入查询中,就像在您的示例中一样,根本没有保护
关于php - sql语句和pdo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16748364/