[英]procedure mysql not working as expected
$j = new DB();
$j->SetSqlCommnd("DELETE FROM cpd_colaborator_access
WHERE col_cod = ".$_POST["colaborator"]."");
$j->Exec();
for($i = 0; $i < count($_POST["page"]); $i++)
{
$j = new DB();
$j->SetSqlCommnd("INSERT INTO cpd_colaborator_access (access_id,col_cod)
VALUES (".$_POST["page"][$i].",".$_POST["colaborator"].")");
$j->Exec();
}
我试图通过下面的过程来表示这个php代码,将一个数组作为参数“ p_pages”和一个id“ p_colaborator”传递;
CREATE DEFINER=`root`@`localhost` PROCEDURE `delegar_paginas`(
IN p_colaborator INT,
IN p_pages INT
)
BEGIN
DECLARE A INT(200);
DECLARE I INT(0);
IF (p_colaborator <> '') THEN
DELETE FROM cpd_colaborator_access
WHERE col_cod = p_colaborator;
WHILE (I<@A) DO
IF(p_pages(0,I) <> '')THEN
INSERT INTO cpd_colaborator_acess (acess_id,col_cod)
VALUES (p_pages(0,I),p_colaborator);
ELSE
SET I = A;
END IF;
END WHILE;
END IF;
END;
我是存储过程的初学者,有人知道这里可能有什么问题吗?
关于p_colaborator和p_pages应该是什么数据类型,我有些困惑-您在参数行中将它们都声明为INT,但将p_colaborator视为字符串,并将p_pages视为(字符串数组),但是插入ID字段中。
MySQL在过程中不支持数组,但是有很多解决方法(http://stackoverflow.com/questions/595371/pass-array-into-a-stored-procedure)。
因此,此过程进行一些假设:
基于这些假设,此过程应能解决问题:
DROP PROCEDURE delegar_paginas;
DELIMITER //
CREATE PROCEDURE delegar_paginas(IN p_colaborator VARCHAR(255), IN p_pages VARCHAR(255))
BEGIN
IF (p_colaborator <> '') THEN
DELETE FROM cpd_colaborator_access WHERE col_cod = p_colaborator;
SET @ins = CONCAT('(', REPLACE(p_pages, ',', CONCAT(', "', p_colaborator, '"), (')), ', ', p_colaborator, ')');
SET @SQL = CONCAT('INSERT INTO cpd_colaborator_acess (acess_id,col_cod) VALUES ', @ins);
SELECT @SQL;
PREPARE stmt FROM @SQL;
EXECUTE stmt;
END IF;
END;
//
DELIMITER ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.