51

什么是参数化查询,在 PHP 和 MySQL 中这种查询的示例是什么?

4

4 回答 4

51

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

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

于 2011-01-17T10:27:37.300 回答
8

这是对它是什么以及它如何工作的清晰而简洁的解释。如何以及为什么使用参数化 [存档链接] (因为原始链接已失效)

本质上,该过程涉及服务器预处理没有参数的请求,因此它知道它是查询的类型。因此,例如一个 SELECT 查询只是一个 SELECT 查询,不能通过参数(请求变量)连接成为 SELECT / DROP 或其他 MySql 注入。相反,注入数据将只是参数字段中的字符串数据。

于 2014-01-07T16:03:08.887 回答
6

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

为什么使用参数化查询

  1. 使用参数化查询的最重要原因是避免 SQL 注入攻击。
  2. 其次,参数化查询处理 sql 查询可能失败的情况,例如在字段中插入 O'Baily。参数化查询处理此类查询,而不会强迫您用双单引号替换单引号。
于 2016-11-23T08:28:22.070 回答
4

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

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

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

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

在 MySQL 中创建准备好的语句:参考取自这篇文章

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

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

于 2015-10-01T10:39:06.787 回答