gpt4 book ai didi

php - 复制行获取最后插入 ID

转载 作者:行者123 更新时间:2023-11-30 21:46:45 24 4
gpt4 key购买 nike

我正在我的数据库中的一个表中复制一行并尝试获取最后插入的 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?

最佳答案

我认为 lastInsertedId 将由您最后的“DROP TEMPORARY TABLE”语句更新。

尝试将查询拆分为两个单独的查询:

<?php

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;");


if(!$this->db->execute()) {
return false;
}

$lastId = $this->db->lastInsertId();
$this->db->query("DROP TEMPORARY TABLE temporary_itin_table");

if(!$this->db->execute()) {
return false;
}

return $lastId;
}

另请注意,当您将 $itineraryID 直接添加到 SQL 查询而不使用准备好的语句时,您会遇到 SQL 注入(inject)漏洞。如果 $itineraryID 是根据用户输入填充的,那么人们就可以破解您的网站。

关于php - 复制行获取最后插入 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49087649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com