@
ovear Let's recap:
从第二层(包括你)开始两位说“能( 100%防止 SQL 注入)”。
我在第三层说“不完全能”,有边界情况并且给出了链接。
你在第四层说:
> However, be aware that PDO will silently fallback to emulating statements that MySQL can't prepare natively
>
> 请认真朗读上句。。这是一个 bug 级别的东西,下面看评论已经提交给 php 官方了。
好,你为了支持你的管但认为这是的 Bug,没问题。我把过程解释给你看,告诉你 PO 说的是类似在没设置好字符集的情况下跑 mysql_real_escape_string 的情况(本身跟 PDO 机制如何没关系),会造成字符变形攻击。
你对我丢:
> However, be aware that PDO will silently fallback to emulating statements that MySQL can't prepare natively
这还是想证明“那是个 Bug ”并且坚持你“能”的观点还是承认原来 prepare 并不能完全阻止 SQL 注入?
另外,你在 9 楼所说
> 而你举例的这个问题在于,PHP 没有这么操作,而是因为某种原因,回退到 SQL 语句拼接了,只不过是 PHP 自动拼接的。
这根本就是错的,原因是进行了本地的 prepare,而不是退回了 SQL 拼接。
此外:
> 另外,PHP 官方已经写得很清楚了,设置 charset 的时候,要在初始化的时候进行。你错误的使用了 PDO,导致 PDO 本身失效,能怪谁呢?
是啊,“你错误的使用了 PDO ”,导致 prepare 不能 100%防止 SQL 注入,怪谁呢楼主?
我建议你直接承认你的错误,因为你在三楼敲“能”这个字的时候,无论后面你怎么说,都已经无法挽回了。