PHP PDO准备的语句是否需要转义?

在PDO :: Prepare页面上,

“并通过不需要手动引用参数来帮助防止SQL注入攻击”

了解这一点,是否有像mysql_real_escape_string()这样的PHP函数来处理PDO的转义响应? 还是PDO照顾所有逃避我?

编辑

我现在意识到我提出了错误的问题。 我的问题确实是,“PDO为我照顾什么?” 我现在认识到,这些答案确实只是避免了引号的需要。 但我仍然需要对传递给execute函数的值进行其他任何PHP清理调用。 如htmlentities(),strip_tags()...等...


PDO不会逃避变量。 变量和SQL命令通过MySQL连接独立传输。 SQL标记器(解析器)从不查看这些值 。 值只是逐字地复制到数据库存储中,而不会造成任何伤害。 这就是为什么不需要用准备好的陈述来编组数据的原因。

请注意,这主要是速度优势。 使用mysql_real_escape_string(),您首先在PHP中编写您的变量,然后向服务器发送低效的SQL命令,而这又必须花费大量的时间从实际的SQL命令中重新分离出实际的SQL命令。 这就是为什么人们经常说安全优势只是隐含的,而不是使用PDO的主要原因。

如果您连接SQL命令并且实际上不使用准备好的语句(不好!),那么是的,PDO仍然有一个转义函数:$ pdo-> quote($ string)


是和否:

  • 您嵌入到语句字符串中的文字需要像平常一样被转义。
  • 您绑定到准备好的语句的值由库处理。

  • 这里很少有人能够理解转义是什么以及何时使用它。
    逃避本身并不会使任何数据“安全”。 它只是逃避分隔符,以区分一部分数据的分隔符。 field = 'it's me'会导致错误,而field = 'it's me'不会。 这是逃脱的唯一目的。 所以,它只适用于使用引号。 如果你不逃避变得无用。

    你使用占位符引号吗? 不可以。因此,不可逃脱是明智的。

    当你使用绑定时,它的工作方式非常不同。
    它不会将整个查询发送到服务器,而是将您准备好的查询与绑定数据分开发送。 所以它不会干涉。 因此没有注射可能。

    链接地址: http://www.djcxy.com/p/16751.html

    上一篇: Do PHP PDO prepared statements need to be escaped?

    下一篇: How can I prevent SQL injection in PHP?