如何从mysql存储过程中的参数接收查询

时间:2013-12-18 11:32:13

标签: mysql stored-procedures

我有一个存储过程,我想执行INSERT操作。我的INSERT查询存储在php变量$ query中,我想将它作为参数传递给我的存储过程。

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

如何在创建存储过程时获取此查询?

1 个答案:

答案 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 演示