PDO最后一个插入id返回0

时间:2014-02-14 05:00:34

标签: php pdo last-insert-id

我遇到上一个插入ID的问题,这是我的表结构

CREATE TABLE `user` (                                     
          `id` int(30) NOT NULL AUTO_INCREMENT,                   
          `fbtoken_id` varchar(255) DEFAULT NULL,                 
          `user_name` varchar(255) DEFAULT NULL,                  
          `email` varchar(50) NOT NULL,                           
          `city` varchar(50) DEFAULT NULL,                        
          `created` datetime DEFAULT NULL,                        
          `modified` datetime DEFAULT NULL,                       
          `fbuserid` varchar(255) DEFAULT NULL,                   
          PRIMARY KEY (`id`),                                     
          KEY `id` (`id`)                                         
        ) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=latin1  

$stmt = $this->core->dbh->prepare("INSERT INTO user(fbtoken_id,user_name,email,city,created,modified,fbuserid)
VALUES(:fbtoken_id,:first_name,:email,:location,:created,:modified,:fbuserid)");

$stmt->execute(array(':fbtoken_id' => $access_token, ':first_name' => $first_name, ':email' => $email, ':location' => $location,
':created' => $datetime, ':modified' => $datetime,':fbuserid' => $fbuserid));

$_SESSION['userid']=$this->core->dbh->lastInsertId();
$affected_rows = $stmt->rowCount();
echo 'userid', $_SESSION['userid'];

这里我将最后一个插入ID设置为session并使用用户id进行所有事务。在我的本地测试中正确获取最后一个插入ID。一切都很完美。但是当我将我的代码上传到服务器时,在某个时间点会话未设置或最后一个插入ID为0.我不明白如何在实时服务器中复制该问题。

使用上一个insertid或任何其他替代方法获取新用户ID是正确的方法吗?

我在某些情况下看到使用

$this->core->dbh->beginTransaction();
  last insert id 
$this->core->dbh->commit();

是否需要此代码?

请帮我调试一下情况。提前致谢

//修改

$stmt = $this->core->dbh->prepare("INSERT INTO user(fbtoken_id,user_name,email,city,created,modified,fbuserid)
VALUES(:fbtoken_id,:first_name,:email,:location,:created,:modified,:fbuserid)");
$this->core->dbh->beginTransaction();
$stmt->execute(array(':fbtoken_id' => $access_token, ':first_name' => $first_name, ':email' => $email, ':location' => $location,
':created' => $datetime, ':modified' => $datetime,':fbuserid' => $fbuserid));

$_SESSION['userid']=$this->core->dbh->lastInsertId();
$affected_rows = $stmt->rowCount();
echo 'userid', $_SESSION['userid'];
 $this->core->dbh->commit();

1 个答案:

答案 0 :(得分:1)

提交后最后一个插入ID不起作用 - 它需要在提交发生之前执行。编辑,因为手指滑了。因此,如果您想使用lastinsert id - 您需要在代码中控制事务。