我正在我的数据库中的一个表中复制一行并尝试获取最后插入的ID。复制行工作正常,AI字段正确更新,但它没有返回最后一个插入ID(虽然它确实返回true - 或者如果我在其位置回显其他东西也可以正常工作)。
其他一些查询也使用最后一个插入ID,这些查询效果很好。
我怀疑它与临时表有关,但是在SO上找不到关于上一个插入ID和临时表的类似问题的任何内容。有谁知道导致问题的原因或是否有解决方法?
DECLARE @Delimiter Char(1)
SET @Delimiter = CHAR(9)
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'MyProfile',
@recipients = 'myemailaad@mail.com',
@subject = 'Defects Total Value',
@body='MyText',
@query= 'MyQuery',
@attach_query_result_as_file=1,
@query_result_no_padding=1,
@Query_Result_Header = 1,
@query_attachment_filename = 'Results.xls',
@query_result_separator =@Delimiter
更新
我确定不是理想的解决方案,但是使用此处详述的复制方法可以使用它:How to copy a row and insert in same table with a autoincrement field in MySQL?
答案 0 :(得分:0)
我认为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注入漏洞。如果从用户输入中填充$itineraryID
,则人们可以破解您的网站。