PHP PDO::lastInsertId() 返回 0

标签 php mysql pdo

预先感谢您阅读本文,我找不到解决我问题的答案...我不明白我在做什么与我找到的教程/建议不同:

SQL 表

CREATE TABLE IF NOT EXISTS `LastInsertID` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(150) NOT NULL,
  `email` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

PHP 文件

<?php

// Connect to database
$user = "foo";
$pswd = "bar";

$db = new PDO( 'mysql:host=localhost;dbname=test', $user, $pswd );
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Prepare request
$rq = $db->prepare('INSERT INTO `LastInsertID` VALUES(NULL,:name,:email)');

// Begin and commit request
$db->beginTransaction();
$values = array('name'=>'Foo','email'=>'bar@baz.com');
$rq->execute($values);
$db->commit();

// Echo last ID
echo $db->lastInsertId();

?>

当它应该返回 6 时返回 0。问题在哪里?

最佳答案

如果您在事务中,则必须在提交之前使用 $db->lastInsertId()。即使您回滚事务,id 也会被“使用”或跳过,这就是为什么您不应该依赖 ID 的顺序。

关于PHP PDO::lastInsertId() 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16894155/

相关文章:

php - HTML 表单按钮值未在 Safari 和 Chrome 中发布

mysql - 从mysql在jsp中显示img

mysql - 配置数据库数据库连接到 MySQL RDS : Timed out after 5000 milliseconds

php - 使用相同的凭据打开到同一个数据库的 2 个连接

php - ipn --- pdo 错误处理

javascript - 选择和更改

php - 在 Magento 博客上添加搜索字段

mysql - 如何设计mvc实体模型

php pdo多数组插入

javascript - PHP生成的json_encode列表中不显示 'null'