MySQL PREPARE语句
简介:在本教程中,您将学习如何使用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语句来使查询执行得更快,更安全。