개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.24 14:13

getLastInsertId 메서드 사용 시 오류가 발생하는 이유를 알고 싶습니다.

목록
  • 그래프이론도령 1일 전 2025.03.24 14:13
  • 4
    1
저는 최근에 데이터베이스 연동을 위해 SQLStatementResult 클래스를 사용하고 있지만 getLastInsertId 메서드가 제대로 작동하지 않습니다. getLastInsertId 메서드는 마지막 INSERT 문에서 생성된 ID를 반환해야 하는데, 이 메서드가 항상 NULL을 반환합니다.

getLastInsertId 메서드가 작동하지 않는 이유는 무엇이며, 어떻게 해야 작동하도록 할 수 있을까요?

예를 들어, 다음 코드를 실행했을 때 getLastInsertId 메서드는 NULL을 반환합니다.

php

$stmt = $db->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');

$stmt->execute(['name' => 'John Doe', 'email' => 'john@example.com']);

$lastId = $stmt->getLastInsertId();



getLastInsertId 메서드가 작동하지 않는 이유를 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    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

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 6,439건 / 1 페이지

검색

게시물 검색