语法如下:
PREPARE statement_name FROM sql_text /*定义*/
EXECUTE statement_name [USING variable [,variable...]] /*执行预处理语句*/
DEALLOCATE PREPARE statement_name /*删除定义*/
简单例子:
mysql> PREPARE prod FROM "INSERT INTO examlple VALUES(?,?)";
mysql> SET @p='1';
mysql> SET @q='2';
mysql> EXECUTE prod USING @p,@q;
mysql> SET @name='3';
mysql> EXECUTE prod USING @p,@name;
mysql> DEALLOCATE PREPARE prod;
===
python应用(片段)
def MYSQL_PREPARE(Connect,Statement_Name,Query)#定义prepare
def MYSQL_EXECUTE_PREPARE_RESULT(Connect,Statement_Name,*arg)#传入参数并执行sql
sql_statment= "SELECT * FROM table_name WHERE id > 10 and email != '' LIMIT 1,?"
#以下为调用程序片段
Num=20
MYSQL_PREPARE(dbcon,"prepare_name",sql_statment)
dataAll = MYSQL_EXECUTE_PREPARE_RESULT(dbcon,"prepare_name",str(Num))#传入参数执行
说明:
1 首先定义sql串,并将变量用?代替
2 调用函数创建PREPARE
在函数中执行类似于这样的语句 PREPARE statement_name FROM sql_text /*定义*/
3 调用函数执行PREPARE
在函数中首先执行,类似于 SET @p='1'; 这样的语句
然后执行 类拟于EXECUTE prod USING @p,@q; 这样的语句
======
转自http://blog.163.com/sea_haitao/
使用 PREPARE 的几个注意点:
A: PREPARE stmt_name FROM preparable_stmt;
预定义一个语句,并将它赋给 stmt_name ,stmt_name 是不区分大小写的。
B: 即使 preparable_stmt 语句中的 ? 所代表的是一个字符串,你也不需要将 ? 用引号包含起来。
C: 如果新的 PREPARE 语句使用了一个已存在的 stmt_name ,那么原有的将被立即释放!
即使这个新的 PREPARE 语句因为错误而不能被正确执行。
D: PREPARE stmt_name 的作用域是当前客户端连接会话可见。
E: 要释放一个预定义语句的资源,可以使用 DEALLOCATE PREPARE 句法。
F: EXECUTE stmt_name 句法中,如果 stmt_name 不存在,将会引发一个错误。
G: 如果在终止客户端连接会话时,没有显式地调用 DEALLOCATE PREPARE 句法释放资源,服务器端会自己动释放它。
H:在预定义语句中,CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE, 和大部分的 SHOW 句法被支持。
I:PREPARE 语句不可以用于存储过程,自定义函数!但从 MySQL 5.0.13 开始,它可以被用于存储过程,仍不支持在函数中使用!
--转自