【问题标题】:MySql stored procedure validationMySql 存储过程验证
【发布时间】:2021-11-01 08:08:27
【问题描述】:

我需要一个存储过程来根据保存在 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 ;

【问题讨论】:

    标签: php mysql sql stored-procedures


    【解决方案1】:

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

    但为此你需要动态 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();
    

    【讨论】:

      猜你喜欢
      • 2015-08-16
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多