php - sql语句和pdo

标签 php mysql pdo

有一个 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/

相关文章:

javascript - DataTables:按列对表进行排序,固定 i++ 值?

mysql - 包含三张表连接的查询不起作用?

php mysql全文搜索通过id连接的多个表

php - MySQL |选择某一天的列数据的最简单方法

PHP PDO 和 bindParam()

php - PDO异常 “could not find driver”

PHP htmlentities 即使有参数也不能工作

php - 如何在 Apache (Windows) 中保护我的 PHP 应用程序文件夹?

php - Case 语句输出不正确?

mysql - 如何从三个表中选择*?