lastInsertId()返回0

时间:2014-11-13 22:57:45

标签: php mysql lastinsertid

我在这里看过类似的问题,但未能解决我的问题...非常感谢所有帮助!

基本上,我的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真的......)

2 个答案:

答案 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。这是我发现的事情,结果是我没有在相关表上为用户授予插入权限。

相关问题