使用 PDO 插入时获取自动递增行 ID [重复]

Posted

技术标签:

【中文标题】使用 PDO 插入时获取自动递增行 ID [重复]【英文标题】:Get auto increment row ID when inserting with PDO [duplicate] 【发布时间】:2020-02-01 05:36:38 【问题描述】:

我正在向 mysql 中插入新数据,并且我有一个名为“bookingid”的列,它是主键并且具有自动递增功能。插入数据后我需要获取自动增量的数量,这是我的代码:

    try 
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   // prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO reservations (bookingdatetime, firstname, lastname, address) 
VALUES (:bookingdatetime, :firstname, :lastname, :address)");

$stmt->bindParam(':bookingdatetime', $bookingdatetime);
$stmt->bindParam(':firstname', $fname);
$stmt->bindParam(':lastname', $lname);
$stmt->bindParam(':address', $address);


// insert a row

$stmt->execute();

echo "success! row id: ";

catch(PDOException $e)
echo json_encode(array("title" => "Database Error", "body" => $e->getMessage()));

$conn = null;

如何回显“成功!行 ID:”的增量?谢谢!

【问题讨论】:

【参考方案1】:

您可以使用lastInsertId() 检索插入的最后一行:

$stmt->execute();
echo "success! row id: $stmt->lastInsertId()";

注意lastInsertId()必须在事务中在commit()之前调用,否则会返回0

【讨论】:

当我把“$bookingid = $stmt->lastInsertId();”它不起作用... 注意:未定义的属性:第 33 行 book.php 中的 PDOStatement::$lastInsertId 需要是$conn->lastInsertId()

以上是关于使用 PDO 插入时获取自动递增行 ID [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 PDO(使用 MySQL)中执行 INSERT 后获取最后插入的行?

在mysql中获取自动递增行ID的时间复杂度

C#获取mysql自动增量值[重复]

如果我的主键不自动递增,如何使用 PHP 获取最后插入的 ID

使用 PDO 插入时忽略重复键

SQL java获取分配给自动递增主键的值[重复]