[英]Is it mandatory to insert a new record just before calling lastInsertId() to get the last inserted ID in PDO?
我正在尝试学习PDO。
首先,我使用以下代码成功地在表中插入了一条记录。
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDBPDO";
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);
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
// use exec() because no results are returned
$conn->exec($sql);
echo "New record created successfully";
}
catch(PDOException $e) {
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
然后,我尝试获取最后插入的记录的ID。 我为此编写了以下代码:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDBPDO";
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);
$last_id = $conn->lastInsertId();
echo "Last inserted ID is: " . $last_id;
}
catch(PDOException $e) {
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
上面的(第二个代码段)的输出如下:
Last inserted ID is: 0
实际上,我期望得到以下输出:
Last inserted ID is: 1
1是我在第一个程序中插入的记录的ID字段中的值。
为什么它没有返回上面指定的预期输出?
在调用lastInsertId()以获得PDO中最后插入的ID之前是否必须插入新记录?
如果是,那么如何在使用我编写的第二个代码片段调用lastInsertId()之前不插入新记录的情况下获取最后插入的ID? 如果没有,原因是什么?
基础数据库调用LAST_INSERT_ID()
按连接运行。 如果断开连接,则该值将丢失
生成的ID在每个连接的服务器中维护。 这意味着函数返回给定客户端的值是针对该客户端影响
AUTO_INCREMENT
列的最新语句生成的第一个AUTO_INCREMENT
值
因此,回答您的问题...
在调用lastInsertId()以获得PDO中最后插入的ID之前是否必须插入新记录?
对,那是正确的。
如何在不插入新记录的情况下获取最后插入的ID
您仅限于获取最大ID值
$maxId = $conn->query('SELECT MAX(id) FROM MyGuests')->fetchColumn();
或者,将第一个脚本中的lastInsertId()
值保存在第二个脚本可以检索的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.