MySQL PREPARE语句

时间:2019-11-20 08:52:08  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL PREPARE语句来使查询执行更快,更安全。

MySQL PREPARE语句简介

在MySQL 4.1之前的版本中,查询以文本格式发送到MySQL服务器。
反过来,MySQL使用文本协议将数据返回给客户端。
MySQL必须完全解析查询并将结果集转换为字符串,然后再将其返回给客户端。

文本协议具有严重的性能影响。
为了解决这个问题,MySQL从4.1版本开始增加了一个称为PREPARE statement的新功能。

PREPARE语句利用了客户端/服务器二进制协议。
它将占位符(?)的查询传递给MySQL Server,如下例所示:

SELECT * 
FROM products 
WHERE productCode = ?;

当MySQL使用不同的productcode值执行此查询时,它不必完全解析该查询。
结果,这有助于MySQL更快地执行查询,尤其是当MySQL多次执行相同的查询时。

由于 PREPARE语句使用占位符(?),因此有助于避免SQL注入的许多变体,从而使您的应用程序更安全。

MySQL PREPARE语句用法

为了使用MySQL PREPARE语句,您使用以下三个语句:

  • PREPARE –准备要执行的语句。

  • EXECUTE –执行由PREPARE语句准备好的语句。

  • DEALLOCATE PREPARE –释放Prepare语句。

下图说明了如何使用PREPARE语句:

MySQL PREPARE语句示例

让我们看一个使用MySQL PREPARE语句的示例。
下面的示例将使用示例数据库中的products表。

首先,准备一条语句,返回产品代码和产品代码指定的产品名称:

PREPARE stmt1 FROM 
	'SELECT 
   	    productCode, 
            productName 
	FROM products
        WHERE productCode = ?';

其次,声明一个名为pc的变量,代表产品代码,并将其值设置为'S10_1678':

SET @pc = 'S10_1678';

第三,执行PREPARE语句:

EXECUTE stmt1 USING @pc;

第四,为pc变量分配另一个产品代码:

SET @pc = 'S12_1099';

第五,使用新产品代码执行PREPARE语句:

EXECUTE stmt1 USING @pc;

最后,释放PREPARE语句:

DEALLOCATE PREPARE stmt1;

在本教程中,您学习了如何使用MySQL PREPARE语句来使查询执行得更快,更安全。