2013-02-15 186 views
-1

我遇到了返回0的lastInsertID问题。它在另一个页面中工作,所以我在这里出错了。PDO lastInsertID正在返回0

以下内容位于try/catch块中。

$idCount = "42"; 
/** set the database **/ 
$db = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); 
/** set the error reporting attribute **/ 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
$stmt = $db->prepare("SELECT image1 FROM items WHERE `id` = :id");  
/** bind the parameters **/ 
$stmt->bindParam(':id', $idCount, PDO::PARAM_STR); 
$stmt->execute();     
$idCount = $db->lastInsertId(); 
echo $idCount; 
+0

如果u想从项目 – 2013-02-15 03:18:15

回答

2

功能名称->lastInsertId()应该给你提示SELECT语句通常不会设置最后一个插入ID。

通常,只有具有auto_increment列的表上的INSERT语句才会显示该行为。

也有例外,虽然,当使用LAST_INSERT_ID(expr)如:

SELECT LAST_INSERT_ID(`id`) AS `id`, image1 FROM items WHERE `id` = :id 
+0

谢谢,这很好! – 2013-02-15 03:41:05

+0

非常有趣我也在寻找这个解决方案。 – kabuto178 2013-02-15 04:45:45

2

lastInsertId()只有在实际进行插入操作时才会返回最后一个插入ID。你只是在做一个select

+0

阿拜获得ID。刚做选择MAX(ID)的最大值,是有什么办法没有做插入得到最后插入的ID? – 2013-02-15 03:19:59

+1

这不是严格正确的;最后一个插入ID可以通过其他方式填充,而不是所有插入都会设置最后一个插入ID值。 – 2013-02-15 03:21:36

+0

这是错误的; 'INSERT INTO ... ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id)'将返回原始ID,以防万一密钥已经存在,即使没有更新。 – Pere 2015-01-15 08:38:46