
getLastInsertId 메서드가 작동하지 않는 이유는 여러 가지가 있을 수 있지만, 가장 일반적인 이유는 다음 두 가지입니다.
1. AUTO_INCREMENT 칼럼이 설정되지 않은 경우: getLastInsertId 메서드는 AUTO_INCREMENT 칼럼의 ID 값을 반환합니다. AUTO_INCREMENT 칼럼이 설정되지 않은 경우, getLastInsertId 메서드는 NULL을 반환합니다. 따라서 AUTO_INCREMENT 칼럼을 설정해야 합니다.
2. INSERT 문이 COMMIT되지 않은 경우: getLastInsertId 메서드는 COMMIT된 INSERT 문에서 생성된 ID 값을 반환합니다. INSERT 문이 COMMIT되지 않은 경우, getLastInsertId 메서드는 NULL을 반환합니다. 따라서 INSERT 문을 COMMIT해야 합니다.
예를 들어, 다음 코드를 실행했을 때 getLastInsertId 메서드는 NULL을 반환합니다.
#hostingforum.kr
php
$db = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');
$stmt = $db->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
$stmt->execute(['name' => 'John Doe', 'email' => 'john@example.com']);
$lastId = $stmt->getLastInsertId();
// getLastInsertId 메서드는 NULL을 반환합니다.
위의 코드에서 getLastInsertId 메서드가 작동하지 않는 이유는 AUTO_INCREMENT 칼럼이 설정되지 않았거나 INSERT 문이 COMMIT되지 않은 때문입니다.
해결 방법은 다음과 같습니다.
#hostingforum.kr
php
$db = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');
// AUTO_INCREMENT 칼럼을 설정합니다.
$db->exec('ALTER TABLE users ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY');
$stmt = $db->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
$stmt->execute(['name' => 'John Doe', 'email' => 'john@example.com']);
// INSERT 문을 COMMIT합니다.
$db->commit();
$lastId = $stmt->getLastInsertId();
// getLastInsertId 메서드는 ID 값을 반환합니다.
위의 코드에서 AUTO_INCREMENT 칼럼을 설정하고 INSERT 문을 COMMIT하여 getLastInsertId 메서드가 작동하도록 합니다.
2025-03-24 14:14