2006 年的一篇内容丰富的博文陈述了有关在 PDO 中使用原生准备好的语句的这些事实:
- 原生预处理语句无法利用查询缓存,导致性能下降。
- 本机准备好的语句不能执行某些类型的查询,例如“SHOW TABLES”。
- 本机准备语句不能正确传达某些其他“SHOW”查询的列长度,从而导致结果乱码。
这在今天还有多少是正确的?
2006 年的一篇内容丰富的博文陈述了有关在 PDO 中使用原生准备好的语句的这些事实:
这在今天还有多少是正确的?
不,如果您使用的是最新的 MySQL 版本,则情况并非如此。至少在大多数情况下。
自 MySQL 5.1.17 起,Prepared statements 使用查询缓存。
几乎所有 SQL 语句都可以作为准备好的语句运行。您可以在 MySQL 文档中找到一个列表。SHOW TABLES
特别是不在该列表中,但老实说,您曾经使用过 PHP 中的 SQL 语句吗?
我对此一无所知,但我认为它是固定的。
不要忘记准备好的语句的模拟不是编码安全的,因此可能(取决于确切的条件)仍然允许 SQL 注入。