我正在从 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;

10-07 18:06