【问题标题】:Using LastInsertId Multiple times, PHP PDO多次使用 LastInsertId,PHP PDO
【发布时间】:2012-07-29 12:31:51
【问题描述】:

我有这个注册的东西,我想在用户点击添加用户后立即填充 3 个表

表格是:

users
roles
status
user_role
user_status

系统必须按如下方式插入数据 用户表:

 username
 password

用户角色

user_id
default value

用户状态

user_id
default value

我使用 pdo begin transaction 的东西和 commit 的东西来完成这项工作...... 当我只在两个表上使用它时,这很有效,但是当我决定使用另一个表并执行相同的代码模式时,它根本不起作用。

代码如下:

$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表。谢谢!

【问题讨论】:

  • 我猜你应该提交每个INSERT,因为事务主体中的数据库没有进行任何更改。
  • 提交每个insert是什么意思?

标签: php database insert pdo


【解决方案1】:

第一次插入后:

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

然后在下面INSERTS

':user' => $insertID,

【讨论】:

  • 我想这肯定会奏效,我明白了,我现在就试试。
猜你喜欢
  • 2011-02-10
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2020-01-01
  • 2012-09-16
  • 2020-10-30
相关资源
最近更新 更多