谁能用简单的英语向我解释什么是参数化查询以及如何在 PHP 中为 MySQL 数据库实现它以避免 SQL 注入?
问问题
622 次
1 回答
1
PHP 手册的准备好的语句和存储过程部分,虽然它专门与 PDO 相关,但它很好地涵盖了这一点:
它们可以被认为是应用程序要运行的 SQL 的一种编译模板,可以使用可变参数进行自定义。准备好的报表有两个主要好处:
查询只需要解析(或准备)一次,但可以使用相同或不同的参数多次执行。准备好查询后,数据库将分析、编译和优化其执行查询的计划。对于复杂的查询,这个过程可能会占用足够的时间,如果需要使用不同的参数多次重复相同的查询,它会显着降低应用程序的速度。通过使用准备好的语句,应用程序避免重复分析/编译/优化循环。这意味着准备好的语句使用更少的资源,因此运行得更快。
准备好的语句的参数不需要引用;驱动程序会自动处理这个。如果应用程序专门使用预准备语句,开发人员可以确定不会发生 SQL 注入(但是,如果查询的其他部分是使用非转义输入构建的,则仍然可能发生 SQL 注入)。
如果您想了解如何使用它们的具体示例,上面的链接页面还包括代码示例。
于 2011-02-05T11:08:09.583 回答