2013-12-18 81 views
-1

我有一個存儲過程,我要執行INSERT操作。我的INSERT查詢存儲在一個php變量$ query中,我想將它作爲參數傳遞給我的存儲過程。如何從mysql存儲過程中的參數接收查詢

$query_procedure = "CALL AddStation('$query','@LID')"

我怎樣才能當我創建存儲過程此查詢?

+0

'$查詢= 「INSERT INTO tablest(站的班次,地理)VALUES( 'STATION1', '印度')」 ; '順便說一句,我有解決方案。我必須在這裏使用'PREPARE STMT'和'EXECUTE STMT'。謝謝@peterm –

+0

@peterm其實我想爲不同的INSERT查詢使用相同的存儲過程,所以我不必將單個參數傳遞給存儲過程。 –

回答

0

其實我想用同一個存儲過程不同的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演示

+0

有幫助嗎?你的問題需要更多幫助嗎? – peterm