参数化查询是什么?

63

什么是参数化查询,以及在PHP和MySQL中可以使用的参数化查询示例是什么?

4个回答

55

参数化查询(也称为预编译语句)是一种预先编译 SQL 语句的方法,因此您只需要提供需要插入语句的“参数”(类似于“变量”),就可以执行该语句。它通常用作防止SQL 注入攻击的手段。

您可以在 PHP 的 PDO 页面上了解更多信息(PDO 是数据库抽象层),尽管如果您使用 mysqli 数据库接口,也可以利用它们(请参阅prepare文档)。


19
@RJD22并不是真的——你只是发布了一个链接,而我花时间解释了参数化查询是什么,为什么它们被广泛使用以及在 PHP 中如何利用两种方法来运用它们。仅依赖外部链接通常不受欢迎,因为它们可能会在未来消失/移动。 - John Parker
18
@RJD22 是的,那个链接发生变化的可能性极小。然而,这不是关键点。如果 Stack Overflow 只是一系列外部链接,它将成为一个相当不实用的资源。我添加了其他信息,如果你不知道在 PHP 网站上要找什么,你需要四处搜索。 - John Parker
2
参数化查询和预处理语句不是两个不同的概念吗?链接 - Kennet Celeste
2
@KennetCeleste 他们是; 根据API的不同,您可以执行未经准备的参数化查询,并且可以创建包含不安全嵌入式用户输入的预处理语句。我真的希望人们停止混淆这两个概念。 - marcelm

8
这是一个清晰简明的解释,阐述了它是什么以及如何工作。 如何和为什么使用参数化 [存档链接] (原链接已失效)

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


6

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

为什么要使用参数化查询

  1. 使用参数化查询最重要的原因是避免 SQL 注入攻击。
  2. 其次,参数化查询会处理 SQL 查询可能失败的情况,例如在字段中插入 O'Baily。参数化查询可以处理此类查询,而无需强制您将单引号替换为双单引号。

4
这个语句是数据库系统的一个特点,可以高效地重复执行相同的SQL语句而不需要再次解析、编译和优化。准备好的语句是模板的一种,由应用程序使用不同的参数。参考文章 数据库系统可以执行相同类型的SQL语句,而无需对其进行解析、编译和优化。
你可以在MySQL中编写或创建准备好的语句,但这并不是一种有效的方式,因为通过准备好的语句API的二进制协议更好。
但是,你仍然可以编写准备好的语句,甚至不需要其他编程,可以直接在SQL中编写。 你可以在MySQL客户端程序中使用准备好的语句。在动态SQL方法中,还可以在存储过程中使用准备好的语句。
在MySQL中创建准备好的语句:参考此文章
PREPARE TestStmt FROM 
'SELECT * FROM Test 
WHERE TestNumber=?';

您可以使用PHP代码通过其API管理预处理语句,或在JDBC的级别上进行管理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接