2013-04-07 154 views
1

我有两个查询将数据插入到它们各自的表中。这工作正常。我一直试图做的是在执行每个查询后获取lastInsertId并将这些值插入第三个表中。但是,当我检查数据库时,输入值0。两个表都有一个自动递增的字段。你能告诉我的代码为什么发生或有任何建议吗?我相对较新的PHP,所以如果你注意到我编码的方式是不整洁的,特别是在我执行查询的最后,请告诉我。我会很感激。pdo lastInsertId()总是返回0

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 
+1

PHP的字符串插值不起作用,因为你相信它的确如此。您不能仅仅替换用于组成字符串的变量,并期望字符串发生更改。 – Maerlyn 2013-04-07 22:32:53

回答

1

现在,我已经有我的咖啡 - 您正在创建最后一个插入语句之前,你填充变量。我想这就是Maerlyn暗示的

您需要将$ queryUserJourney移动到2插入点下方。

+0

感谢您的帮助jmadsen和早上好。现在我可以去睡觉了。 – 2013-04-07 23:45:50

1

你可能想尝试

$db->lastInsertId(); 

...相反。请注意0​​中的小写d

Reference doc

+0

我在问题中错误地输入了ID。更新了那个小错误。我使用$ lastUserID = $ db-> lastInsertId();因为我想将该变量与另一个一起插入到第三个表中。 – 2013-04-07 22:56:35

0

@Colin,

PDO的最后插入的id返回一个自动增加的主键的值,如果我不是大错特错了。它在我看来像$查询的表没有这

+0

有可能是这种情况,但是由于@ colin-roe使用了'INSERT INTO table(col1,col2)VALUES'(而不是'INSERT INTO TABLE VALUES ...'),你无法确定桌子架构。 – 2013-04-07 22:39:06

+0

这是正确的,但由于插入正在工作,但插入ID是零,我会坚持我的答案:-)惊讶的大写问题不会通过一个错误,虽然 – jmadsen 2013-04-07 22:42:44

+0

我有自动递增主键字段在桌子里。你不会在查询中包含它,因为它无论如何都是自动增量的。我选择使用SQL将列名和值插入习惯之外。 – 2013-04-07 22:53:58