什么是参数化查询?

什么是参数化查询? 请给我一个PHP和MySQL的例子..

参数化查询(也称为准备语句 )是预编译SQL语句的一种方法,因此您需要提供的所有参数都是需要插入到语句中的“参数”(也就是“变量”)被执行。 它通常被用来防止SQL注入攻击 。

您可以在PHP的PDO页面 (PDO是一个数据库抽象层)上阅读更多关于这些内容的信息,但是如果您正在使用mysqli数据库接口(请参阅准备文档),也可以使用它们。

这是一个清楚而简洁的解释,以及它是如何工作的。 如何以及为什么要使用参数化

必要的过程涉及服务器预处理没有参数的请求,因此它知道它的查询类型。 所以,例如一个SELECT查询只是一个SELECT查询,不能被一个参数(请求变量)串联起来,成为一个SELECT / DROP或其他一些MySql注入。 注入数据只是参数字段中的字符串数据。

这个语句是数据库系统中同一个SQL语句高效重复执行的特性之一。 准备好的语句是一种模板,由具有不同参数的应用程序使用。 参考文章

数据库系统可以执行相同的SQL语句,而无需对同一种SQL语句进行解析,编译和优化。

您可以在MySQL中编写或创建预准备语句,但这不是一种有效的方法,因为通过准备语句API的二进制协议更好。

但是,你仍然可以编写,甚至不需要任何其他编程,你可以直接在SQL中编写。 您可以使用MySQL客户端程序的准备语句。您还可以在存储过程中使用准备好的语句来实现动态SQL方法。

在MySQL中创建准备好的语句: 参考文献摘自本文

PREPARE TestStmt FROM 'SELECT * FROM Test WHERE TestNumber=?'; 

您可以使用PHP代码通过API来管理准备好的语句,或者在JDBC级别进行管理。

参数化查询是一个查询,其中占位符用于参数,参数值在执行时提供。

为什么要使用参数化查询

  1. 使用参数化查询的最重要原因是为了避免SQL注入攻击。
  2. 其次,参数化查询负责处理sql查询可能失败的情况,例如,将O'Baily插入到字段中。 参数化的查询在不强迫您用双引号替换单引号的情况下支持这种查询。