2

2006 年的一篇内容丰富的博文陈述了有关在 PDO 中使用原生准备好的语句的这些事实:

  1. 原生预处理语句无法利用查询缓存,导致性能下降。
  2. 本机准备好的语句不能执行某些类型的查询,例如“SHOW TABLES”。
  3. 本机准备语句不能正确传达某些其他“SHOW”查询的列长度,从而导致结果乱码。

这在今天还有多少是正确的?

4

2 回答 2

3

不,如果您使用的是最新的 MySQL 版本,则情况并非如此。至少在大多数情况下。

  1. 自 MySQL 5.1.17 起,Prepared statements 使用查询缓存。

  2. 几乎所有 SQL 语句都可以作为准备好的语句运行。您可以在 MySQL 文档中找到一个列表。SHOW TABLES特别是不在该列表中,但老实说,您曾经使用过 PHP 中的 SQL 语句吗?

  3. 我对此一无所知,但我认为它是固定的。

不要忘记准备好的语句的模拟不是编码安全的,因此可能(取决于确切的条件)仍然允许 SQL 注入。

于 2012-06-25T19:24:21.553 回答
3
  1. 法莱。从 MySQL 5.1.17 开始,查询缓存适用于准备好的语句
  2. 为什么你需要准备一个语句来做一个 SHOW TABLES?
  3. 你能引用一个来源吗?我个人没有任何问题
于 2012-06-25T19:25:31.700 回答