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

ответ

1

Теперь, когда у меня был мой кофе, вы создаете последний оператор insert перед тем, как вы заполняете переменные. Я думаю, что это то, что намекал Maerlyn на

Вам нужно переместить $ queryUserJourney ниже ваших 2 вставок.

+0

Спасибо за помощь jmadsen и доброе утро. Теперь я могу заснуть. –

1

Вы могли бы хотеть попробовать

$db->lastInsertId(); 

... вместо этого. Обратите внимание на строчку d в lastInsertId.

Reference doc

+0

Я набрал ID по ошибке в вопросе. Обновлена ​​эта небольшая ошибка. Я использую $ lastUserID = $ db-> lastInsertId(); так как я хочу вставить эту переменную вместе с другой в третью таблицу. –

0

@Colin, последняя вставка ID

PDO возвращает значение первичного ключа автоинкрементируемого, если я не ошибаюсь полностью. Мне кажется, что в таблице $ query нет этого

+0

Возможно, это так, но поскольку @ colin-roe использует 'INSERT INTO table (col1, col2) VALUES' (вместо' INSERT INTO table VALUES ... '), вы не можете точно знать таблицу схемы. –

+0

это правильно, но так как вставки работают, но вставки Id равны нулю, я буду придерживаться своего ответа :-) Удивленный вопрос о капитализации не через ошибку, хотя – jmadsen

+0

У меня есть поле с добавочным первичным ключом с автоматическим добавлением в таблице. В любом случае вы не включаете это в запрос, поскольку он автоматически увеличивается. Я выбираю, чтобы имена столбцов и значения были вставлены из привычки с помощью SQL. –

Смежные вопросы