摘要:在本教程中,您将学习如何使用MySQL 准备好的语句来使您的查询执行得更快、更安全。
MySQL准备语句简介
在 MySQL 4.1 之前的版本中,查询以文本格式发送到 MySQL 服务器。反过来,MySQL 使用文本协议将数据返回给客户端。 MySQL 必须完全解析查询并将结果集转换为字符串,然后再将其返回给客户端。
文本协议具有严重的性能影响。为了解决这个问题,MySQL从4.1版本开始添加了一个新功能,称为prepared statements。
准备好的语句利用了客户端/服务器二进制协议。它将包含占位符 ( ?
) 的查询传递到 MySQL 服务器,如下例所示:
SELECT *
FROM products
WHERE productCode = ?;
Code language: SQL (Structured Query Language) (sql)
当 MySQL 使用不同的productcode
值执行此查询时,它不必完全解析该查询。因此,这有助于 MySQL 更快地执行查询,特别是当 MySQL 多次执行同一查询时。
由于准备好的语句使用占位符 ( ?
),这有助于避免 SQL 注入的许多变体,从而使您的应用程序更加安全。
MySQL 准备语句用法
为了使用 MySQL 准备好的语句,您需要使用以下三个语句:
PREPARE
– 准备要执行的语句。-
EXECUTE
– 执行由PREPARE
语句准备的准备好的语句。 -
DEALLOCATE PREPARE
– 释放准备好的语句。
下图说明了如何使用准备好的语句:
MySQL 准备语句示例
让我们看一下使用 MySQL 准备语句的示例。以下示例将使用示例数据库中的products
表。
首先,准备一条返回产品代码和产品代码指定的产品名称的语句:
PREPARE stmt1 FROM
'SELECT
productCode,
productName
FROM products
WHERE productCode = ?';
Code language: SQL (Structured Query Language) (sql)
其次,声明一个名为pc
的变量,代表产品代码,并将其值设置为'S10_1678'
:
SET @pc = 'S10_1678';
Code language: SQL (Structured Query Language) (sql)
三、执行准备好的语句:
EXECUTE stmt1 USING @pc;
Code language: SQL (Structured Query Language) (sql)
第四,为 pc 变量分配另一个产品代码:
SET @pc = 'S12_1099';
Code language: SQL (Structured Query Language) (sql)
第五,使用新产品代码执行准备好的语句:
EXECUTE stmt1 USING @pc;
Code language: SQL (Structured Query Language) (sql)
最后,发布准备好的声明:
DEALLOCATE PREPARE stmt1;
Code language: SQL (Structured Query Language) (sql)
在本教程中,您学习了如何使用 MySQL 准备好的语句来使查询执行得更快、更安全。
本教程有帮助吗?