【发布时间】:2015-03-20 22:49:58
【问题描述】:
显然是防止 SQL 注入的最佳方法is to use prepared statements。然而,准备好的语句完全是为其他东西设计的:
在数据库管理系统中,准备好的语句或参数化的 语句是用于执行相同或相似数据库的功能 高效重复语句。
[...]
另一方面,如果查询只执行一次,服务器端 由于额外的往返行程,准备好的语句可能会更慢 到服务器。实施限制也可能导致性能 处罚:某些版本的MySQL没有缓存prepared结果 查询,并且某些 DBMS(例如 PostgreSQL)不执行额外的 执行期间的查询优化。
我猜测准备好的语句主要设计用于在紧密循环中使用,以减少重复语句的编译时间。 SQL 注入预防只是一个奖励。
假设我们不使用 PDO 或“模拟”预准备语句,那么对页面上仅使用一次的查询使用预准备语句是否有意义。
【问题讨论】:
-
这取决于使用的 dbms。您使用的是哪个 dbms?
-
防止 sql 注入的好处应该超过性能问题,除非这成为瓶颈
-
@jarlh 我正在寻找一个通用的答案,因为我同时使用 SQL Server 和 MySQL(但在不同的项目中)。
标签: sql sql-injection