我在这里看过类似的问题,但未能解决我的问题...非常感谢所有帮助!
基本上,我的PHP中有以下SQL代码:
$query = 'CREATE TEMPORARY TABLE tmp SELECT * from orders WHERE id='.$old_order_id.';
ALTER TABLE tmp drop id; # drop autoincrement field
UPDATE tmp SET groupID=null, timeOrdered=CURRENT_TIMESTAMP, totalOrderStatus=0;
INSERT INTO orders SELECT 0,tmp.* FROM tmp;
DROP TABLE tmp;';
$db->exec($query);
$new_order_id = $db->lastInsertId();
现在,我原以为lastInsertId()会成功返回上次插入'orders'的行的id。相反,我得到一个零 - 但我不知道这是因为它是采取表'tmp'的最后一个插入ID,还是因为它是由于我正在做的其他一些错误。 (我不明白为什么它会从tmp获取id,因为那不是最后插入的id真的......)
答案 0 :(得分:1)
看起来您只是尝试将现有行复制到表中并修改了一些数据。为什么不简化这个并按照以下方式执行此操作:
INSERT INTO orders (
/* fields you are changing */
groupID,
timeOrdered,
totalOrderStatus,
/* other fields from select below that are not changing */
field1,
field2,
...
)
SELECT
/* values for fields you are changing */
null,
CURRENT_TIMESTAMP,
0,
/* other fields from order table that are to remain unchanged */
field1,
field2,
...
FROM orders
WHERE id = ?
不要为您的主键字段插入任何值(假设它是自动增量),那么您的插入ID将正常工作。
答案 1 :(得分:0)
检查是否实际插入了该行。如果未插入,则将没有新的ID。这是我发现的事情,结果是我没有在相关表上为用户授予插入权限。