php sql 데이터 존재여부 확인 (PDO 사용)

조회수 1571회

안녕하세요, php 입문자입니다.

PHP Data Object 를 이용해서 유저 테이블에 특정 이름을 가지고있는 유저가 있다면 유저가 있다고 출력하고 아니면 없다는 메세지를 출력하고 싶어서

   $pdo = new PDO("mysql:host=localhost:3306;dbname=userdb;charset=utf8;", "(계정 이름)", "(암호)");

    /*

    ㆍㆍㆍ

    */

    $sql = "SELECT * FROM user WHERE name = '닉네임'";
    $result = $pdo->query($sql);

    if (empty($result)) {
        echo "있음";
    } else {
        echo "없음";
    }

    /*

    ㆍㆍㆍ

    */

대충 이런식으로 작성했더니 닉네임 을 가지고 있는 유저가 없다고 "없음" 메세지가 나오는게 아닌 오류 메세지가 나옵니다. 혹시 empty 함수를 이용한 방법 말고 다른 방법이 있을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • PDO::query() 자체는 이렇게 사용하시면 됩니다.

    $sql = "SELECT * FROM user WHERE name = '닉네임'";
    
    $result = $pdo->query($sql); // query() 메소드는 실패시 데이터, 성공시 FALSE 가 리턴됨
    
    echo $result === FALSE ? '없음' : '있음';
    

    하지만 변수 바인딩을 통한 인젝션 공격 방지, 실제 데이터 조회 효율성 증진 등을 위해 보통 이렇게 합니다.

    // 사용자 입력이 강제 주입되지 않은 쿼리문을 준비함
    $query = $pdo->prepare('SELECT id, created_at FROM user WHERE name = :username');
    
    // 준비한 쿼리문에 값을 안전히 연결하고 실행
    $query->execute([':username' => '닉네임']);
    
    // 실행된 쿼리 결과를 다 불러오지 않고 하나씩 꺼내서 사용
    while ($row = $query->fetch()) {
        echo $row['id'].' 사용자 가입일: '.$row['created_at'];
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)