【发布时间】:2018-03-03 18:25:14
【问题描述】:
我正在我的数据库中的一个表中复制一行并尝试获取最后插入的 ID。复制该行可以正常工作,并且 AI 字段会正确更新,但它没有返回最后一个插入 ID(尽管它确实返回 true - 或者如果我在其位置回显其他内容也可以正常工作)。
其他一些查询也使用最后插入 ID,并且效果很好。
我怀疑这与临时表有关,但在 SO 上找不到任何关于上次插入 ID 和临时表的类似问题的信息。有谁知道导致问题的原因或是否有解决方法?
public function duplicateItinRow($itineraryID){
$this->db->query("CREATE TEMPORARY TABLE temporary_itin_table AS SELECT * FROM itinerary_ref WHERE Itinerary_ID = $itineraryID;
UPDATE temporary_itin_table SET Itinerary_ID=NULL;
INSERT INTO itinerary_ref SELECT * FROM temporary_itin_table;
DROP TEMPORARY TABLE temporary_itin_table");
//Execute
if($this->db->execute()){
return $this->db->lastInsertId();
} else {
return false;
}
}
更新:
我确定这不是理想的解决方案,但使用此处详述的复制方法使其工作:How to copy a row and insert in same table with a autoincrement field in MySQL?
【问题讨论】:
-
你能否确认
id列在表itinerary_ref中有auto_increment,如果没有,那么lastInsertId将无法在非自动增量PRIMARY_KEY 列上工作 -
谢谢 - 是的,两者都可以确认,并且插入的行正在正确更新 AI 列,只是没有返回值。
-
是的 - 它返回:
string(1) "0" -
你能显示
return $this->db->query('SELECT LAST_INSERT_ID()')->fetchColumn(0);的输出而不是PDO->lastInsertId(); -
谢谢 - 很抱歉最初使用它 - 无法让 PDO->lastInsertId() 工作
标签: php mysql temp-tables last-insert-id