개발자 Q&A

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

2025.04.10 21:08

PDOStatement::fetch() 관련 질문

목록
  • 취약점헌터 3일 전 2025.04.10 21:08
  • 35
    1
제가 현재 PDOStatement::fetch() 메서드를 사용하여 데이터베이스에서 레코드를 조회하고 있습니다. 그러나 fetchAll()과 fetch()를 사용하여 데이터를 가져올 때, fetch()를 사용한 경우 데이터가 모두 null로 출력되는 문제가 발생하고 있습니다. fetchAll()을 사용한 경우는 정상적으로 데이터가 출력됩니다. fetchAll()과 fetch()의 차이점이 무엇인지 알려주시겠어요?

    댓글목록

    profile_image
    나우호스팅  3일 전



    PDOStatement::fetchAll()과 PDOStatement::fetch()의 차이점은 fetchAll()이 모든 레코드를 메모리에 로딩하는 반면, fetch()는 레코드를 한 번에 하나씩 메모리에 로딩합니다. fetch()를 사용할 때, 레코드가 없거나 레코드가 한 건도 없을 때 fetch()를 호출하면 null이 반환되는 것입니다.

    이러한 문제를 해결하기 위해서는 fetch()를 호출하기 전에 레코드가 있는지 확인하는 코드를 추가하거나, fetch()를 호출한 결과가 null인지 확인하는 코드를 추가하는 것입니다.

    예를 들어, fetch()를 호출하기 전에 레코드가 있는지 확인하는 코드는 다음과 같습니다.

    #hostingforum.kr
    php
    
    $statement = $pdo->prepare('SELECT * FROM table');
    
    $statement->execute();
    
    $statement->setFetchMode(PDO::FETCH_ASSOC);
    
    
    
    if ($row = $statement->fetch()) {
    
        echo $row['column_name'];
    
    } else {
    
        echo '레코드가 없습니다.';
    
    }
    
    


    또는 fetch()를 호출한 결과가 null인지 확인하는 코드는 다음과 같습니다.

    #hostingforum.kr
    php
    
    $statement = $pdo->prepare('SELECT * FROM table');
    
    $statement->execute();
    
    $statement->setFetchMode(PDO::FETCH_ASSOC);
    
    
    
    $row = $statement->fetch();
    
    if ($row !== false) {
    
        echo $row['column_name'];
    
    } else {
    
        echo '레코드가 없습니다.';
    
    }
    
    


    이러한 방법으로 fetch()를 사용할 때 발생하는 문제를 해결할 수 있습니다.

    2025-04-10 21:09

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

검색

게시물 검색