私は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;
?>
上記の出力 (2 番目のコード スニペット) は次のとおりです。
Last inserted ID is: 0
実際には、以下の出力が得られると予想していました。
Last inserted ID is: 1
1は、最初のプログラムで挿入したレコードの ID フィールドの値です。
上記のように期待される出力が返されないのはなぜですか?
PDO で最後に挿入された ID を取得するために lastInsertId() を呼び出す直前に新しいレコードを挿入することは必須ですか?
はいの場合、私が書いた 2 番目のコード スニペットを使用して lastInsertId() を呼び出す直前に、新しいレコードを挿入せずに最後に挿入された ID を取得するにはどうすればよいですか? いいえの場合、その理由は何ですか?