我正在从 PHP 向我的存储过程发送一个逗号分隔列表。存储过程如下:
UPDATE RolesMenus SET Enabled=1 WHERE MenuID IN(prmMenusList) AND RoleID = prmRoleID;
现在的问题是,当我通过代码传递菜单列表(prmMenusList)时,它只会更新列表中第一个元素的值。我认为这是由于列表中的一些单引号引起的。查询可能形成如下:
UPDATE RolesMenus SET Enabled=0 WHERE MenuID IN('1,7,19,20,21,26') AND RoleID = 74;
我怎样才能避免这种情况?
在这里,我添加了 CodeIgniter(PHP) 代码:
Public function enableMenus($selectedMenus, $roleID){
$menusList = "";
foreach($selectedMenus as $item){
$menusList .= $item.",";
}
$menusList = substr($menusList, 0,strlen($menusList)-1); // to remove the leading comma
$result=$this->db->query("call uspEnableMenus('".$menusList."',".$roleID.")");
$tempResult = $result;
$result->next_result();
return $tempResult->result();
}
最佳答案
我已经解决了这个问题。 :)
刚刚使用的查询如下:
UPDATE RolesMenus SET Enabled=1 WHERE FIND_IN_SET(MenuID,prmMenusList) AND RoleID = prmRoleID;
或者:
UPDATE RolesMenus SET Enabled=1 WHERE FIND_IN_SET(MenuID,'1,2,3,4') AND RoleID = 1;