MySQL存儲過程是存儲在數(shù)據(jù)庫中的一組預(yù)編譯的SQL語句,可以接受參數(shù)、執(zhí)行控制語句和返回結(jié)果。其中,執(zhí)行SQL語句是存儲過程的核心功能之一。
執(zhí)行SQL語句一般需要使用EXECUTE
語句,它的基本語法如下:
EXECUTE statement;
其中statement
表示執(zhí)行的SQL語句,可以使用變量進(jìn)行動態(tài)拼接。例如,執(zhí)行一個簡單的查詢語句:
DECLARE var INT;
SET var = 10;
SET @sql = CONCAT('SELECT * FROM table WHERE id =',var);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
在上面的例子中,首先聲明了一個變量var
,然后使用CONCAT
函數(shù)將變量與查詢語句拼接在一起,生成一個SELECT
語句。接著,使用PREPARE
語句將SQL語句預(yù)編譯,并將其賦值給一個變量stmt
。最后,使用EXECUTE
語句執(zhí)行SQL語句,并使用DEALLOCATE
釋放預(yù)編譯語句。
值得注意的是,執(zhí)行SQL語句時需要注意SQL注入攻擊。如果SQL語句中含有用戶輸入的變量,需要使用PREPARE
語句和EXECUTE
語句中的PARAMETERS
來動態(tài)綁定輸入?yún)?shù)。例如:
DECLARE var INT;
SET var = 10;
SET @sql = 'SELECT * FROM table WHERE id = ?';
PREPARE stmt FROM @sql;
EXECUTE stmt USING var;
DEALLOCATE PREPARE stmt;
在上面的例子中,使用了?
占位符代替SQL語句中的var
。然后,在EXECUTE
語句中使用USING
關(guān)鍵字將變量綁定到占位符上,避免了注入攻擊。