[英]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.