Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
有一个 pdo 包装类,它使用以下方法关闭了模拟或准备好的语句:
setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
我看到一些 sql 语句是使用标准非参数化方法编写的,如下所示:
select * from table where name = '".$name."'.
即使使用了 pdo 包装器,这些语句是否也可以防止 sql 注入?
你防止注射的想法是完全错误的。
它不是 PDO 仅仅因为它的存在(可能会受到某些包装器的干扰)保护您的查询,而是准备好的语句。
只要您使用准备好的语句,您的查询就是安全的,无论它是 PDO 还是包装器,甚至是糟糕的旧 mysql ext。
但是,如果您将数据直接放入查询中,就像在您的示例中一样,则根本没有保护