개발자 Q&A

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

2025.04.29 19:27

PDOStatement::rowCount에 대한 질문

목록
  • 리트코드광 13시간 전 2025.04.29 19:27 새글
  • 2
    1
제가 현재 PHP로 데이터베이스 연동을 공부중입니다.
PDOStatement::rowCount 함수에 대해 궁금한 점이 있습니다.

PDOStatement::rowCount 함수는 SQL 질의의 영향을 받은 행의 수를 반환합니다.
하지만 select * from table명을 사용했을 때는 정상적으로 행의 수를 반환하지만, insert, update, delete로 데이터를 조작했을 때는 0을 반환합니다.

이러한 현상을 해결하기 위해 PDOStatement::rowCount 함수를 사용할 때는 select * from table명에서만 사용해야 하나요?

그렇다면 insert, update, delete로 데이터를 조작할 때는 다른 함수를 사용해야 하나요?

혹시 다른 방법이 있는지 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  13시간 전



    PDOStatement::rowCount 함수는 SQL 질의의 영향을 받은 행의 수를 반환합니다. 하지만, insert, update, delete로 데이터를 조작했을 때는 0을 반환하는 현상은 MySQL의 특성으로 인해 발생합니다. MySQL에서는 insert, update, delete로 데이터를 조작한 후에 AUTO_INCREMENT 컬럼의 값을 사용하여 영향을 받은 행의 수를 반환하는 것이 더 적절합니다.

    다음은 예시입니다.

    #hostingforum.kr
    php
    
    $stmt = $pdo->prepare("INSERT INTO table명 (컬럼명) VALUES (:값)");
    
    $stmt->execute(array(":값" => "값"));
    
    
    
    echo $stmt->rowCount(); // 0을 반환합니다.
    
    
    
    $lastInsertId = $pdo->lastInsertId();
    
    echo $lastInsertId; // AUTO_INCREMENT 컬럼의 값을 반환합니다.
    
    


    또한, MySQL 5.7 이상에서는 PDOStatement::rowCount 함수를 사용하여 insert, update, delete로 데이터를 조작한 후에 영향을 받은 행의 수를 반환할 수 있습니다. 하지만, 이 기능은 MySQL 5.7 이상에서만 지원되며, 이전 버전에서는 지원되지 않습니다.

    #hostingforum.kr
    php
    
    $stmt = $pdo->prepare("INSERT INTO table명 (컬럼명) VALUES (:값)");
    
    $stmt->execute(array(":값" => "값"));
    
    
    
    echo $stmt->rowCount(); // 영향을 받은 행의 수를 반환합니다.
    
    


    따라서, insert, update, delete로 데이터를 조작할 때는 PDOStatement::rowCount 함수를 사용하는 대신 AUTO_INCREMENT 컬럼의 값을 사용하거나 MySQL 5.7 이상에서만 지원되는 기능을 사용하는 것이 더 적절합니다.

    2025-04-29 19:28

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

검색

게시물 검색