簡體   English   中英

PHP PDO :: lastInsertId()返回0

[英]PHP PDO::lastInsertId() returns 0

在此先感謝您閱讀此書,但找不到解決我問題的答案...我不知道自己在做什么,而與找到的教程/建議不同:

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順序的原因。

用這個

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

代替

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

我已經刪除了NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM