MySQL 准备好的语句

在本教程中,您将学习如何使用MySQL 准备好的语句 使您的查询执行得更快、更安全。

摘要:在本教程中,您将学习如何使用MySQL 准备好的语句 使您的查询执行得更快、更安全。

MySQL准备语句介绍

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

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

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

SELECT * 
FROM products 
WHERE productCode = ?;

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

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

MySQL准备好的语句用法

为了使用 MySQL 准备好的语句,您使用以下三个语句:

  • PREPARE – 准备执行语句。
  • EXECUTE – 执行由语句准备的准备好的 PREPARE 语句。
  • DEALLOCATE PREPARE – 发布准备好的声明。

下图说明了如何使用准备好的语句:

MySQL 准备好的语句

MySQL 准备好的语句实例

我们来看一个使用 MySQL 准备好的语句的例子。以下实例将使用示例数据库中的 products 表。

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

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

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

SET @pc = 'S10_1678';

三、执行准备好的语句:

EXECUTE stmt1 USING @pc;

MySQL 准备好的语句实例 1

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

SET @pc = 'S12_1099';

五、用新的产品代码执行prepared语句:

EXECUTE stmt1 USING @pc;

最后,发布准备好的语句:

DEALLOCATE PREPARE stmt1;

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