0

私は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 を取得するにはどうすればよいですか? いいえの場合、その理由は何ですか?

4

1 に答える 1