Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL-SQL查询帮助_Php_Sql_Mysql - Fatal编程技术网

PHP MySQL-SQL查询帮助

PHP MySQL-SQL查询帮助,php,sql,mysql,Php,Sql,Mysql,我有以下代码将用户添加到特定角色。代码工作正常,但我想更改SQL,这样它只会在角色不存在时将用户插入到角色中 非常感谢您的帮助。这是我的密码: // ------------------------------------------------------------------ // ADD SELECTED USERS TO SELECTED ROLE // ------------------------------------------------------

我有以下代码将用户添加到特定角色。代码工作正常,但我想更改SQL,这样它只会在角色不存在时将用户插入到角色中

非常感谢您的帮助。这是我的密码:

    // ------------------------------------------------------------------
    // ADD SELECTED USERS TO SELECTED ROLE
    // ------------------------------------------------------------------
    if(isset($_POST['ddlAddSelected']) && $_POST['ddlAddSelected'] != 'Add To' && isset($_POST['checked']))
    {
        // get checked checkbox values - userId
        $checked = array_map('intval',$_POST['checked']);

        // get selected security role - role name
        $selected_role = mysqli_real_escape_string($conn, $_POST['ddlAddSelected']);

        // get role id from db
        $get_role_id = mysqli_query($conn, "SELECT RoleId, RoleName FROM roles WHERE RoleName = '$selected_role' Limit 1")
        or die($dataaccess_error);

        // if roleId present
        if(mysqli_num_rows($get_role_id) == 1)
        {
            $row = mysqli_fetch_array($get_role_id);
            $role_id = $row['RoleId'];
            $role_name = $row['RoleName'];

            $i=1;
            foreach($checked as $user_id)
            {
                // add selected users to role
                $add_selected = mysqli_query($conn, "INSERT INTO users_in_roles(UserId, RoleId, RoleName) VALUES($user_id, $role_id, '$role_name')")
                or die($dataaccess_error);

                $count = $i++;
            }

            // if sucess
            if($add_selected)
            {
                $msg = "<div class='msgBox3'>SUCCESS: ($count) USERS have been ADDED to ($selected_role) ROLE.</div>";
            }
            else
            {
                echo 'some error message here...';
            }
        }
    }
    elseif(isset($_POST['ddlAddSelected']) && $_POST['ddlAddSelected'] != 'Add To' && !isset($_POST['checked']))
    {
        $msg = $msg_error;
    }
将唯一密钥UserId+RoleID添加到users_in_roles表中

Ps:为什么您还需要用户角色表中的角色名称字段

CREATE UNIQUE INDEX `user_role` ON `users_in_roles` (`UserId`, `RoleID`)
使用:

…以确保仅在角色不存在时插入该角色


SELECT将从变量中提取值-它实际上并不是从from子句中的表中进行选择,这只是为了使查询有效。

刚刚添加了另一个查询,用于检查用户是否已经存在于所选角色中。它工作正常。

zerkms,当我需要知道与id关联的角色名称时,它会保存一个额外的查询。对不起,我不确定“添加唯一密钥”是什么意思。你能解释一下你的意思吗?thanks@ScottW:我添加了一个查询来执行该操作Nice cheat从未见过+1@ScottW:数据库错误不是帮助您诊断问题的良好描述。列计数与行的值计数不匹配1@ScottW:看在上帝的份上,指定要插入的列;-在用户角色中插入用户ID、角色ID、角色名称。顺便问一下,我的答案是什么-我这样做了,但仍然不起作用。它将每个用户插入四次。我想尽一切办法都试过了。
INSERT INTO users_in_roles
SELECT $user_id, $role_id, '$role_name'
  FROM users_in_roles 
 WHERE NOT EXISTS(SELECT NULL
                    FROM users_in_roles
                   WHERE userid = $user_id
                     AND roleid = $role_id)