PDO lastInsertId()在重复密钥更新时使用时返回0?

Joh*_*ith 8 php mysql pdo

我有一个如下查询:

$a = $members->prepare("insert into a(name) values(:name) 
                            on duplicate key update name = :name");
Run Code Online (Sandbox Code Playgroud)

然后,当我这样做:

$insert_id = $a->lastInsertId()

如果查询成功插入了一行,它将按预期返回插入ID,如果更新了一行,它也将按预期返回更新的行ID(排序).但如果它既没有插入或更新任何东西,因为一切都是相同的,那么它只返回0.

我想这是非常合乎逻辑的默认行为,但有没有办法改变它,以便它可以返回它试图更新的行的id,就像它实际更改行中的某些内容时一样.

谢谢.

ans*_*son 20

有很多地方可以找到答案,但PDO的特异性可能会妨碍您的搜索结果......

首先,请确保添加id=LAST_INSERT_ID(id)ON DUPLICATE条款中,如DOCS底部所述.在id这种情况下是你的主键的列名(所以你的情况可能/可能不会标题id).

此外,您可能必须指定序列对象参数->lastInsertId()才能使其工作.我以前在某些情况下遇到过这个问题.

  • 幸运/不幸(取决于你如何看待它),MySQL只有`AUTO_INCRMENT`序列,所以除非它有一些非标准扩展,对于`MySQL``->lastInsertId()`不带参数是可以的,与`PostreSQL` 等。 (2认同)