在 MySQL 中,PREPARE
和 EXECUTE
是用于执行预处理语句的命令。预处理语句的主要优点是提高执行效率和减少 SQL 注入攻击的风险。
1. PREPARE
语句
PREPARE
语句用于准备一个 SQL 语句,并将其编译成一个可以执行的语句。预处理语句通常会在查询中使用占位符 (?
) 来代替具体的值。
语法:
sqlCopy Code
PREPARE stmt_name FROM 'SQL_query';
stmt_name
是一个预定义的名称,您可以使用它来引用该预处理语句。SQL_query
是要准备执行的 SQL 语句,通常带有占位符。
2. EXECUTE
语句
EXECUTE
语句用于执行已经通过 PREPARE
语句准备好的 SQL 语句。它可以传递参数值给 SQL 查询。
语法:
sqlCopy Code
EXECUTE stmt_name USING @param1, @param2, ...;
stmt_name
是您在PREPARE
阶段定义的语句名称。@param1
,@param2
, 等是参数变量,它们的值会替代预处理语句中的占位符。
示例:如何使用 PREPARE
和 EXECUTE
假设您想要执行一个带有参数的 SELECT
查询:
sqlCopy Code
-- 创建并准备预处理语句
PREPARE stmt1 FROM 'SELECT * FROM users WHERE age = ? AND country = ?';
-- 设置变量值
SET @age = 25;
SET @country = 'USA';
-- 执行预处理语句
EXECUTE stmt1 USING @age, @country;
-- 释放预处理语句
DEALLOCATE PREPARE stmt1;
在这个例子中:
- 使用
PREPARE
语句创建了一个 SQL 查询模板,其中?
是占位符。 - 使用
SET
语句为参数@age
和@country
赋值。 - 使用
EXECUTE
执行预处理语句,并将参数传入查询。 - 最后,使用
DEALLOCATE
来释放预处理语句资源。
总结
PREPARE
用于编译并准备一个 SQL 语句。EXECUTE
用于执行已准备好的 SQL 语句,并传入实际的参数值。
这种方法可以提高执行效率并增加 SQL 注入防范,因为 SQL 查询被事先编译,参数是在执行时绑定的。