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