程序mysql不能正常工作
问题描述:
$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”;程序mysql不能正常工作
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://*.com/questions/595371/pass-array-into-a-stored-procedure)。
因此,该程序做了一些假设:
- p_colaborator是一个字符串(VARCHAR(255))。
- p_pages是逗号分隔的数字列表(如'1,2,3,4')。
有了这些假设,这个过程应该做的伎俩:
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 ;
为什么你认为这是错的?我们需要猜测你得到的是什么**执行错误? – zerkms