在 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 查询被事先编译,参数是在执行时绑定的。



