我有一个如下查询:
$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()才能使其工作.我以前在某些情况下遇到过这个问题.