【问题标题】:PHP/MYSQL how to get last_insert_id in transactionPHP/MYSQL 如何在事务中获取 last_insert_id
【发布时间】:2012-07-29 12:10:52
【问题描述】:

我有 2 个 MySQL 表

table#1 - 容器:

container_id INT (PK AI)
start_time DATETIME

table#2 - 预订

reservation_id INT (PK AI) 
reservation_time DATETIME
container_id INT (FK)

PHP 代码:

mysqli_query($dbc,'SET AUTOCOMMIT=0');
mysqli_query($dbc,'START TRANSACTION');

$q1 = "INSERT INTO container (start_time) VALUES
      ('2012-07-03 11:00:00')";
$q2 = "INSERT INTO reservation (reservation_time, container_id) VALUES
      ('2012-07-03 11:00:00', LAST_INSERT_ID())";

$r1 = mysqli_query($dbc, $q1);
$r2 = mysqli_query($dbc, $q2);

if ($r1 && r2){
    mysqli_query($dbc, 'COMMIT');
} else {
    mysqli_query($dbc, 'ROLLBACK');
}

我做错了什么? $r2 返回假。 LAST_INSERT_ID() 不起作用

【问题讨论】:

  • 您可能希望在 r2 调用之后添加实际的“显示错误”代码以获取错误。 (查一下,我不确定它是怎么回事,但你正在寻找or die(mysql_error()); 或类似的东西)
  • 你的 container.container_id 是 auto_increment PK 吗?没有它,就永远不会有 last_insert_id()。
  • @MarcB 他提到 container_id 是自动递增的。 container_id INT (PK AI),PK代表主键,AI代表自增。
  • @mihai:除了我的问题,我没有看到提到 auto_increment。
  • 对不起朋友们!上面的代码是正确的。我在项目中的代码中犯了语法错误。

标签: php mysql transactions lastinsertid


【解决方案1】:

LAST_INSERT_ID() 可以在任何上下文中工作,无论是事务还是用户定义的存储过程或用户定义的函数。

您的问题绝对不是LAST_INSERT_ID(),而是您的代码的任何其他部分更可能出现故障。

尝试检查是否有错误并输出错误,以便能够阅读错误消息并采取相应措施。

为此使用mysql_error()

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多