我有一個存儲過程,我要執行INSERT操作。我的INSERT查詢存儲在一個php變量$ query中,我想將它作爲參數傳遞給我的存儲過程。如何從mysql存儲過程中的參數接收查詢
$query_procedure = "CALL AddStation('$query','@LID')"
我怎樣才能當我創建存儲過程此查詢?
我有一個存儲過程,我要執行INSERT操作。我的INSERT查詢存儲在一個php變量$ query中,我想將它作爲參數傳遞給我的存儲過程。如何從mysql存儲過程中的參數接收查詢
$query_procedure = "CALL AddStation('$query','@LID')"
我怎樣才能當我創建存儲過程此查詢?
其實我想用同一個存儲過程不同的INSERT查詢 讓我不要有單獨的參數傳遞給存儲過程。
雖然技術上可以做到這一點,如下圖所示,我極力勸阻你做它。這是一個非常糟糕的主意。它很簡單,沒有任何意義,並且不會增加代碼的價值。這是SQL注入易怒。你無法使用準備好的語句來插入語句本身。這是脆弱的,易於出錯,因爲你傳遞查詢字符串等...
你最好沒有像這樣的存儲過程。只需在客戶端代碼中使用預先準備的語句
DELIMITER$$
CREATE PROCEDURE AddARow(IN _sql TEXT, OUT _lid INT)
BEGIN
SET @sql = _sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
SET _lid = LAST_INSERT_ID();
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
使用範例:
SET @lid = NULL;
SET @sql = 'INSERT INTO tablest (STATION_NAME, GEOGRAPHY) VALUES (''station1'',''India'')';
CALL AddARow(@sql, @lid);
SELECT @lid;
這裏是SQLFiddle演示
有幫助嗎?你的問題需要更多幫助嗎? – peterm
'$查詢= 「INSERT INTO tablest(站的班次,地理)VALUES( 'STATION1', '印度')」 ; '順便說一句,我有解決方案。我必須在這裏使用'PREPARE STMT'和'EXECUTE STMT'。謝謝@peterm –
@peterm其實我想爲不同的INSERT查詢使用相同的存儲過程,所以我不必將單個參數傳遞給存儲過程。 –