繁体   English   中英

过程mysql无法按预期工作

[英]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)。

因此,此过程进行一些假设:

  • 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 ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM