저는 PDO를 배우려고합니다.PDO에서 마지막으로 삽입 된 ID를 가져 오기 위해 lastInsertId()를 호출하기 직전에 새 레코드를 삽입해야합니까?
먼저 아래 코드를 사용하여 테이블에 레코드를 성공적으로 삽입했습니다.
<?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', '[email protected]')";
// 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: 1
: 사실
Last inserted ID is: 0
, 나는 아래의 출력을 얻을 것으로 예상 은 첫 번째 프로그램에 삽입 한 레코드의 ID 필드 값입니다.
위에 명시된 예상 출력을 반환하지 않는 이유는 무엇입니까?
PDO에서 마지막으로 삽입 된 ID를 얻기 위해 lastInsertId()를 호출하기 전에 새 레코드를 삽입해야합니까?
그렇다면 작성한 두 번째 코드 스 니펫을 사용하여 lastInsertId()를 호출하기 전에 새 레코드를 삽입하지 않고 마지막 삽입 된 ID를 어떻게 얻을 수 있습니까? 그렇지 않다면 그 이유는 무엇입니까?
INSERT를 한 직후 lastInsertId를 얻지 못하는 이유에 대해 혼란 스럽습니다 ... 왜 개별적으로하고 있습니까? – antfuentes87