PHP PDO :: lastInsertId()返回0

时间:2013-06-03 09:58:47

标签: 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();

?>

当它应该返回时返回0.问题出在哪里?

2 个答案:

答案 0 :(得分:6)

如果您正在进行交易,则必须在提交前使用$db->lastInsertId()。即使您回滚事务,id也会被“使用”或被跳过,这就是为什么你不应该依赖于ID来连续。

答案 1 :(得分:0)

使用此

INSERT INTO `LastInsertID` (name, email) VALUES(:name,:email)

代替

INSERT INTO `LastInsertID` VALUES(NULL,:name,:email)

我删除了NULL