[英]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.