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 准备好的语句的例子。以下实例将使用示例数据库中的 products 表。

首先,准备一条语句,返回产品代码和产品代码指定的产品名称:
PREPARE stmt1 FROM
'SELECT
productCode,
productName
FROM products
WHERE productCode = ?';
其次,声明一个名为 的变量 pc ,代表产品代码,并将其值设置为 'S10_1678' :
SET @pc = 'S10_1678';
三、执行准备好的语句:
EXECUTE stmt1 USING @pc;

四、为pc变量分配另一个产品代码:
SET @pc = 'S12_1099';
五、用新的产品代码执行prepared语句:
EXECUTE stmt1 USING @pc;

最后,发布准备好的语句:
DEALLOCATE PREPARE stmt1;
在本教程中,您学习了如何使用 MySQL 准备好的语句来使您的查询执行得更快、更安全。