pdo lastInsertId() 不断返回 0

Posted

技术标签:

【中文标题】pdo lastInsertId() 不断返回 0【英文标题】:pdo lastInsertId() keeps returning 0 【发布时间】:2013-04-07 22:28:21 【问题描述】:

我有两个查询将数据插入到各自的表中。这很好用。我一直在尝试做的是在执行每个查询后获取 lastInsertId 并将这些值插入到第三个表中。但是,当我检查数据库时,输入了值 0。两个表都有一个自动递增的字段。你能通过我的代码告诉我为什么会发生这种情况或有什么建议吗?我对 php 比较陌生,所以如果你注意到我编码的方式不整洁,特别是在我执行查询的最后,请告诉我。我会很感激的。

if ($oneWay)
    
        $query = "INSERT INTO journey
        (from_destination,to_destination,journey_type,depart_date,depart_time,seats_available,journey_message,user_type)
        VALUES('$pjFrom','$pjTo','$radioJourneyType', STR_TO_DATE('$departDate','%d/%m/%Y'),'$newDepTime','$seatcounter','$textareanotes','$radUserType')";
        $userID = "SELECT user_id FROM `user` ORDER BY journey_id DESC LIMIT 1";
    
    else
    
        $query = "INSERT INTO journey
        (from_destination,to_destination,journey_type,depart_date,depart_time,return_date,return_time,seats_available,journey_message,user_type)
        VALUES('$pjFrom','$pjTo','$radioJourneyType', STR_TO_DATE('$departDate','%d/%m/%Y'),'$newDepTime',STR_TO_DATE('$returnDate','%d/%m/%Y'),'$newRetTime ','$seatcounter','$textareanotes','$radUserType')";
        //$userID = "SELECT user_id FROM `user` ORDER BY journey_id DESC LIMIT 1";
    
    $queryfb = "INSERT INTO user
        (facebook_id,facebook_username,facebook_first_name,facebook_last_name,facebook_image,facebook_link)
        VALUES('$hdnFacebookId','$hdnUsername','$hdnFirstName','$hdnLastName','$hdnFacebookImg','$hdnFacebookUrl')";
        //$journeyID = "SELECT journey_id FROM `journey` ORDER BY journey_id DESC LIMIT 1";

    $queryUserJourney = "INSERT INTO user_journey
                        (user_id,journey_id)
                        VALUES('$lastUserID','$lastJourneyID')";

    $db->exec($query);
    $lastUserID = $db->lastInsertId();
    $db->exec($queryfb);
    $lastJourneyID = $db->lastInsertId();
    $db->exec($queryUserJourney);//problem: 0 values being entered???

更新

$db->exec($query);
    $lastUserID = $db->lastInsertId();
    $db->exec($queryfb);
    $lastJourneyID = $db->lastInsertId();
    $queryUserJourney = "INSERT INTO user_journey
                        (user_id,journey_id)
                        VALUES('$lastUserID','$lastJourneyID')";
    $db->exec($queryUserJourney);working thanks to jmadsen

【问题讨论】:

PHP 的字符串插值并不像您认为的那样工作。您不能只替换用于组成字符串的变量并期望字符串发生变化。 【参考方案1】:

现在我已经喝完咖啡了 - 您正在创建最后一个插入语句,然后再填充变量。我认为这就是 Maerlyn 所暗示的

您需要将 $queryUserJourney 移到您的 2 次插入下方。

【讨论】:

感谢 jmadsen 的帮助,早上好。现在我可以睡觉了。【参考方案2】:

你可以试试

$db->lastInsertId();

... 相反。注意lastInsertId 中的小写d

Reference doc

【讨论】:

我在问题中输入了错误的 ID。更新了那个小错误。我使用 $lastUserID = $db->lastInsertId();因为我想将该变量与另一个变量一起插入到第三个表中。【参考方案3】:

@科林,

如果我没有完全弄错的话,PDO 的最后一个插入 id 会返回一个自增主键的值。在我看来 $query 的表没有这个

【讨论】:

有可能是这种情况,但是由于@colin-roe 使用了INSERT INTO table (col1, col2) VALUES(而不是INSERT INTO table VALUES...),因此您无法确定表架构。 没错,但由于插入工作正常,但插入 ID 为零,我会坚持我的回答 :-) 惊讶的是,大写问题并没有通过错误发生 我在表中有自动递增的主键字段。您不要将其包含在查询中,因为无论如何它都是自动递增的。我习惯性地选择使用 SQL 插入列名和值。

以上是关于pdo lastInsertId() 不断返回 0的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO::lastInsertId 返回 0

为啥当我在 mysql 中调用 STORED PROCEDURE 时 pdo->lastInsertId() 返回 0?

PDO LastInsertId 不返回任何内容

PDO lastinsertId 在事务中返回 0,php - 5.6

PDO::lastInsertID 有时不起作用

PDO:lastInsertId 返回啥值? [复制]