我有一个存储过程,我想执行INSERT操作。我的INSERT查询存储在php变量$ query中,我想将它作为参数传递给我的存储过程。
$query_procedure = "CALL AddStation('$query','@LID')"
如何在创建存储过程时获取此查询?
答案 0 :(得分:0)
实际上我想对不同的INSERT查询使用相同的存储过程 这样我就不必将各个参数传递给存储过程。
虽然您可以从技术上实现这一目标,但如下所示,我强烈反对您这样做。这是一个非常糟糕的主意。这很简单没有任何意义,并且对代码没有任何价值。 sql注射很容易发生。您无法为insert语句本身使用预准备语句。它是脆弱的,并且容易出错,因为你传递了查询字符串等...
最好没有这样的存储过程。只需在客户端代码中使用预准备语句即可。
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 演示