2012-07-31 80 views
2

我有這個註冊的東西,我想3表,儘快在用戶點擊添加用戶使用LastInsertId多次,PHP PDO

表充滿了數據:

users 
roles 
status 
user_role 
user_status 

username 
password 

user_rol:系統必須如下 用戶表中插入數據ES

user_id 
default value 

user_status

user_id 
default value 

我用PDO開始交易的東西,承諾東西,使這項工作... 這個偉大的工作,當我用它只是兩個表,但是當我決定使用另一個表格並執行相同的代碼模式,但它根本無法工作。

這裏是代碼:

$this->db->beginTransaction(); 
     $sth = $this->db->prepare("INSERT INTO users (username, password) 
     VALUES (:user,:pass)"); 
     $sth->execute(array(
      ':user'=> $data['user'], 
      ':pass'=> Hash::create('sha256', $data['pass'], HASH) 
     )); 

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

     $sth = $this->db->prepare("INSERT INTO user_status (user_id, status_id) VALUES (:user, :status)"); 
     $sth->execute(array(
      ':user' => $this->db->lastInsertId(), 
      ':status' => 1 
     )); 

     $this->db->commit(); 

那你覺得是問題,我也懷疑這是某種形式的語法錯誤,但我找不到,它,所以我最後的手段是問,因爲我不確定這是否適用於3張桌子。謝謝!

+0

我想你應該提交各'INSERT'因爲沒有在數據庫中事務實體所做的更改。 – 2012-07-31 16:57:50

+0

通過提交每個「insert」,你的意思是什麼? – 2012-07-31 17:07:03

回答

0

您第一次插入後:

$insertID = $this->db->lastInsertId();

然後在下面的INSERTS

':user' => $insertID, 
+0

我想這肯定會奏效,我明白了,我現在就試試。 – 2012-07-31 17:12:31