问题 什么是参数化查询?


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


12063
2018-01-17 10:18


起源

可能重复 参数化查询的示例 - Piskvor
啊,是的,对不起,谢谢你指出这一点..任何人都可以请删除我的问题。谢谢! - totalnoobs
没有必要删除这个问题 - 如果有足够的人认为它是重复的,它会自动关闭等等:-) - John Parker
@middaparka:好吧然后:) - totalnoobs


答案:


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

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


14
2018-01-17 10:27



大声笑这和我在一行中说的相同>。> - RJD22
@ RJD22不是真的 - 你刚刚发布了一个链接,我花时间解释了什么是参数化查询,为什么它们被普遍使用以及它们可以在PHP中被利用的两种方式。完全依赖外部链接通常不赞成他们 威力 将来离开/搬家。 - John Parker
我确定PHP.net页面上的链接会存在一段时间:) - RJD22
@ RJD22是的,是的 epically 特定链接不太可能发生变化。但是,这不是重点。 Stack Overflow是一个相当不太有用的资源,如果它只是一系列外部链接,我添加了额外的信息,你必须在PHP网站上搜索一下,如果你不知道你在看什么对于。 - John Parker


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

该过程必不可少的是服务器在没有参数的情况下预处理请求,因此它知道查询的类型。因此,例如SELECT查询只是一个SELECT查询,并且不能通过参数(请求变量)连接成SELECT / DROP或其他一些MySql注入。相反,注入数据将只是参数字段中的字符串数据。


2
2018-01-07 16:03





此语句是数据库系统的一个功能,其中相同的SQL语句以高效率重复执行。准备好的语句是一种模板,由具有不同参数的应用程序使用。参考文章

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

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

但是你仍然可以编写,甚至这不需要任何其他编程,你可以直接在SQL中编写。 您可以为MySQL Client程序使用预准备语句。您还可以在存储过程中使用预准备语句来进行动态SQL方法。

在MySQL中创建预准备语句: 参考文献来自本文

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

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


0
2017-10-01 10:39





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

为什么使用参数化查询

  1. 使用参数化查询的最重要原因是避免SQL注入攻击。
  2. 其次参数化查询处理sql查询可能失败的情况,例如:将O'Baily插入田野。参数化查询可以在不强制您用双引号替换单引号的情况下进行此类查询。

0
2017-11-23 08:28