首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lastInsertId()返回0

lastInsertId()返回0
EN

Stack Overflow用户
提问于 2014-11-13 22:57:45
回答 2查看 364关注 0票数 0

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

基本上,我的PHP中有以下SQL代码:

代码语言:javascript
复制
$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 .)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-13 23:08:34

看起来,您只是尝试将一个现有的行复制到您的表中,并修改了一些数据。你为什么不简化一下,然后这样做:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-08-01 22:46:45

检查该行是否实际被插入。如果没有插入它,那么就没有新的Id了。这就是我发现正在发生的事情,结果是我没有在相关的表上为我的用户授予插入权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26920037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档