2012-07-29 41 views
1

我已經看到了幾個問題和答案,但沒有一個與我的問題非常相似,所以現在我問。在連接表上插入Mysql

這裏的情況是

我有一個名爲usersrolesuser_role表,

users

領域user_idusernamepassword

:角色

領域role_idrole_name

:USER_ROLE

領域user_idrole_id

外鍵的user_role.user_iduser.user_id

外鍵的user_role.role_idrole.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(); 
+0

你必須做2插入 – 2012-07-29 07:40:24

+0

如果我添加另一個插入像 'insert INto user_role VALUES(x,y)' 我不能設置參數x,bec。 USER_ROLE。user_id尚未創建。 – 2012-07-29 07:48:56

+0

你用什麼語言爲你的服務器端? – 2012-07-29 07:51:25

回答

0

因爲它好像你正在使用PHP & PDO,這種簡化的代碼會你插入一個用戶後進入users表,由返回的值

$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表中的id

瞭解更多關於lastInsertId()

在事務中處理這兩個插入語句,你很好。

+0

哇,我沒有檢查pdo的那一部分..這是自開始pdo以來只有一天..,讓我試着瞭解 – 2012-07-29 07:53:09

+0

我認爲有些東西還是錯的,它給了我一個空白屏幕 '$ this- > DB->的BeginTransaction(); $ string =「插入用戶(用戶名,密碼) VALUES(:user,:pass,:first,:middle,:last,:course)」; $ sth = $ this-> db-> prepare($ string); $ sth-> execute(array( ':user'=> $ data ['user'], ':pass'=> $ data ['pass'] )); ('。$ this-> db-> lastInsertId(user_id)。',:role)「);這樣就可以實現這個功能。 $ sth-> execute(array( ':role'=> 3 )); $ this-> db-> commit(); ' – 2012-07-29 08:33:58