-1

我有一个提交的表单,其中创建了一个用户并且可以分配多个角色:例如(管理员、用户等)

表单将数据作为数组发布roles[]

当只能选择一个角色时,我让一个mysqli_query()创建用户(在用户表中)。然后第二个在 roleid 表中创建一行,使用 mysqls 将 userid 与 roleid 匹配,如果为用户分配了多个角色LAST_INSERT_ID,mysql 会工作吗?LAST_INSERT_ID

三张表如下:

users (name, email, password, id)
roleid (userid, roleid)
roles(id, description)

我需要在 roleid 表中为用户创建表单选择的每个复选框创建一个条目。我考虑过将数组 ( implode(',',$roles)) 内爆,但我不确定 mysql 是否接受这种形式的值。有任何想法吗?

4

3 回答 3

2

您必须为每个角色查询一次,或者在一个查询中插入多条记录。使用 MySQLi,您甚至可以为此使用准备好的语句。

$user_id = mysqli_insert_id();
$query = "INSERT INTO `roleid` (userid, roleid) VALUES ";

foreach($roles as $index => $role_id) {
  $roles[$index] = "($user_id," . intval($role_id) . ")";
}

$query .= implode(', ', $roles);
于 2012-06-13T15:12:32.363 回答
1
if (count($roles)) {
   $qry="INSERT INTO roleid (userid, roleid) VALUES ";
   $part="($user_insert_id, ";
   $qry . = $part . implode(")," . $part, roles) . ")";
   mysql_query($ary, $db_handle);
}
于 2012-06-13T15:20:24.787 回答
1

如果您曾经将一个用户插入到users表中并将其保存LAST_INSERT_ID到一个变量中,例如,$last_insert_id您可以根据$last_insert_id需要使用它执行尽可能多的查询(虽然它没有被覆盖:-))。

所以:

  1. 插入新用户
  2. 取回$last_insert_id
  3. 为每个角色 ID 运行insert into roleid values ($role_id, $last_insert_id)

    运行一个insert into roleid values ($role_id_1, $last_insert_id), ($role_id_2, $last_insert_id), ($role_id_3, $last_insert_id), ...
于 2012-06-13T15:09:19.377 回答