MySql 存储过程验证

MySql stored procedure validation

我需要一个存储过程来根据保存在 PHP 变量中的条件执行操作。此存储过程将 运行 可能的 2 个插入操作之一:

if $var = 1 then insert 1 else insert 2

这可能吗,或者我必须执行 2 个存储过程并在 php 脚本中进行验证吗?

示例:

DELIMITER $$
CREATE PROCEDURE example_sp 
    (in val1 char(100), in val2 char(50), in val3 char(10), in val4 char(50))
BEGIN
      IF($var = 1) 
      THEN
      INSERT INTO table1 (val1, val2) VALUES (val1, val2);
      ELSE
      INSERT INTO table2 (val1, val2) VALUES (val1, val2);    
      END IF;    
END $$
DELIMITER ;

不,你只需要一个存储过程。

但是为此你需要动态 sql

DELIMITER $$
   CREATE PROCEDURE example_sp 
       (IN var int, in val1 char(100), in val2 char(50), in val3 char(10), in val4 char(50))
   BEGIN
       IF(var = 1) 
       THEN
           SET @sql := CONCAT("INSERT INTO table1 (",val1,",", val2,") VALUES (?,?);");
           SET @a := val1;
           SET @b := val2;
       ELSE
           SET @sql := CONCAT("INSERT INTO table2 (",val1,",", val2,") VALUES (?,?);");
            SET @a := val1;
           SET @b := val2;
       END IF;    
       
       PREPARE stmt FROM @sql;
       EXECUTE stmt USING @a,@b;
       DEALLOCATE PREPARE stmt;
   END $$
DELIMITER ;

并且在PHP

$stmt=$db->prepare("CALL example_sp(?,?,?,?,?)");
$stmt->bind_param('issss',$var,$val1,$val2,$val3,$val4);
$stmt->execute();