2012-07-31 79 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