2013-04-07 173 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