1. 程式人生 > 其它 >mysql中Prepare、execute、deallocate的使用方法

mysql中Prepare、execute、deallocate的使用方法

mysql中Prepare、execute、deallocate的使用方法
PREPARE語句準備好一條SQL語句,並分配給這條SQL語句一個名字供之後呼叫。準備好的SQL語句通過EXECUTE命令執行,通過DEALLOCATE PREPARE命令釋放掉。

語句的名字不區分大小寫。準備好的SQL語句名字可以是字串,也可以是使用者指定的包含SQL文字的變數。PREPARE中的SQL文字必須代表一條單獨的SQL語句而不能是多條SQL語句。在SQL語句中,? 字元用來作為後面執行查詢使用的一個引數。? 不能加上引號,及時打算將它們繫結到字元變數中也不可以。

基本語法
PREPARE stmt from '你的sql語句'; // PREPARE msql FROM @MyQuery; 變數存放sql
EXECUTE stmt (如果sql有引數的話, USING xxx,xxx); // 這裡USING的只能是會話變數
DEALLOCATE PREPARE stmt;

預定義好sql.
執行預定義的sql
釋放掉資料庫連線
擴充套件一下這個語法還有什麼作用呢?
他還可以在儲存過程中動態的拼接表名,欄位名,來達到動態查詢的效果
sql語句中還可以用?來代表引數,這樣可以有效的防止sql注入
例項用法
delimiter //
create procedure myTest()
begin
set @_sql = 'select ? + ?';
set @a = 5;
set @b = 6;
PREPARE stmt from @_sql; // 預定義sql
EXECUTE stmt USING @a,@b;// 傳入兩個會話變數來填充sql中的 ?
DEALLOCATE PREPARE stmt; // 釋放連線
end //

delimiter //
create procedure myTest(in columnName varchar(32)) // 傳入一個字串
BEGIN
drop table if exists tmpTable; // 如果臨時表存在先刪除掉
set @_sql = concat('create temporary table if not exists tmpTable( ', columnName, ' varchar(32), id int(11), _name varchar(32));'); // 建立臨時表的語法,我們把傳入的引數拼接進來
PREPARE stmt from @_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt; // 執行
desc tmpTable;
end //

————————————————
版權宣告:本文為CSDN博主「HERO-WRH」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/qq_38216661/article/details/98871552