lastInsertId()在数据库

时间:2015-09-18 09:03:51

标签: php mysql pdo

所以我有一个PHP页面,将预订插入我的数据库,我使用方法lastInsertId()向用户显示他们的预订ID(设置为AUTO_INCREMENT在数据库中)。

问题是,代码运行时会添加两个重复记录,并且该方法返回第二个预订ID。有人可以解释为什么会发生这种情况吗?

这是代码:

<?php

...

$stmt = $conn->prepare('INSERT bookings (DateFrom, DateTo, GuestHouseID_FK, GuestID_FK, RoomID_FK) VALUES (:DateFrom, :DateTo, :GuestHouseID_FK, :GuestID_FK, :RoomID_FK)'); 
$stmt->bindParam(':DateFrom', $DateFrom, PDO::PARAM_STR); 
$stmt->bindParam(':DateTo', $DateTo, PDO::PARAM_STR); 
$stmt->bindParam(':GuestHouseID_FK', $GuestHouseID_FK, PDO::PARAM_INT); 
$stmt->bindParam(':GuestID_FK', $GuestID_FK, PDO::PARAM_STR);
$stmt->bindParam(':RoomID_FK', $RoomID_FK, PDO::PARAM_STR);
$stmt->execute(); 
echo '<H3>'; 
echo 'Thank you. Your booking has been completed!'; 
echo '</H3>'; 
if($stmt->execute()){
    $booking_id = $conn->lastInsertId();
    echo "Your Booking ID is " . $booking_id;
    echo '<hr>';
}
echo '<p>Click here to return to the main menu</p>';
echo '<form action="@AT2_main_menu.html">';
echo '<input type="submit" value="Main menu">';
echo '</form>';
}
catch(PDOException $e) 
{
  echo "Something's gone wrong. Please try again or contact the admin"; 
}
$conn = null;
?>

1 个答案:

答案 0 :(得分:0)

您正在运行$stmt->execute()两次。当你在if语句中调用它时,你第二次调用它。删除您对该功能的第一次调用。