在连接表Mysql上插入

时间:2012-07-29 07:38:07

标签: php mysql sql database join

我已经看到了几个问题和答案,但没有一个与我的问题非常相似,所以现在我问。

情况如下

我有一个名为usersrolesuser_role

的表格

表格users

字段user_idusernamepassword

表格:角色

字段role_idrole_name

表格:user_role

字段user_idrole_id

user_role.user_id

外键user.user_id

user_role.role_id

外键role.role_id

我的问题是当我创建用户时,我还想将他们的角色设置为我在<select>元素中选择的默认值或选定值。

我尝试了几件事:

INSERT INTO users as t1 (t1.username, t1.password, t2.role)
JOIN user_role as t2 ON t1.user_id = t2.user_id
VALUES (:username, :password, :role)

我做错了吗?

编辑因为下面的回答

我认为有些事情仍然是错误的,它给了我一个空白的屏幕

$this->db->beginTransaction();
$string = "INSERT INTO users (username, password)
VALUES (:user,:pass,:first,:middle,:last,:course)";
$sth = $this->db->prepare($string);
$sth->execute(array(
':user'=> $data['user'],
':pass'=> $data['pass']
));

$sth = $this->db->prepare("INSERT INTO user_roles (user_id, role_id)
VALUES (' . $this->db->lastInsertId(user_id) . ', :role)");
$sth->execute(array(
':role' => 3
));

$this->db->commit();

1 个答案:

答案 0 :(得分:0)

因为您似乎正在使用PHP&amp; PDO,这个简化的代码将负责您的插入:

$pdo->beginTransaction();
$stmt = $conn->prepare('INSERT INTO users (username, password) VALUES (?, ?)');
$stmt->execute(array($username, $password));

$stmt = $conn->prepare('INSERT INTO user_roles (user_id, role_id) VALUES (' . $pdo->lastInsertId() . ', ?)');
$stmt->execute(array($role));
$pdo->commit();

将用户插入users表后,$pdo->lastInsertId()返回的值是刚刚插入id表的users

详细了解lastInsertId()

在事务中包含这两个插入语句,你就可以了。