php 입문 | PDO를 사용한 데이터베이스 액세스 | PDO으로 테이블 데이터 목록 조회하기


그러면 실제로 데이터베이스에 액세스하여 해보자. 먼저 테이블에 저장되어 있는 레코드를 조회를 해보기로 한다.

레코드의 데이터를 조회하려면 SQL 쿼리(명령문)을 직접 실행하는 메소드를 이용하는데, 이는 “query"라는 것으로, 다음과 같이 호출한다.

$변수 = $pdo->query(쿼리);

인수에 실행하는 쿼리의 텍스트를 지정해 실행하면, 실행 결과가 반환된다. 테이블의 데이터를 한꺼번에 얻으려면 쿼리는 대충 다음과 같이 한다.

select * from 테이블명

이 query 메소드의 반환 값은 “PDOStatement"라는 클래스의 인스턴스이다. 이것은 “fetch"라는 메소드를 호출하여 얻어온 레코드를 차례로 꺼내 올 수 있다. 따라서 반복을 통해 필요한 만큼 레코드를 꺼내 처리한다.

while ($변수 = $pdostatement->fetch(꺼내오는 방법의 지정)) {
    ...... 꺼내온 레코드 처리하기 ......
}

fetch의 인수는 값을 꺼내기 위해서 값을 제공한다. 일반적으로 PDO::FETCH_ASSOC을 지정한다. 이것은 각각의 컬럼 명을 키에 설정한 연관 배열의 형태로 값을 추출한다. 이 후는 꺼낸 연관 배열에서 필요한 값을 추출 처리하면 된다.

그럼 이전 sampletable 테이블에서 레코드를 꺼내 나열하는 예제를 만들어 보겠다.

<?php
$result = "";
try {
    $pdo = new PDO("mysql:host=localhost:3306;dbname=mysampledata;charset=utf8", "root","1234");
    $statement = $pdo->query("select * from sampletable");
    while($record = $statement->fetch(PDO::FETCH_ASSOC)){
        $result .= "<tr>";
        foreach($record as $column){
            $result .= "<td>" . $column . "</td>";
        }
        $result .= "</tr>";
    }
} catch(PDOException $e){
    $result = "#ERR:" . $e->getMessage();
}
$pdo = null;
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type"  content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
        <style>
        h1 { font-size:14pt;
            padding:5px;
            background-color:#AAFFFF; }
        table tr td {
            padding:5px;
            background-color:#DDFFCC; }
        </style>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <table>
        <?php echo $result; ?>
        </table>
    </body>
</html>

여기에서 “index.php"라는 파일로 작성한다. 여기에서는 $pdo->query에서 select * from sampletable을 실행하여 얻은 결과를 fetch에서 꺼내 테이블에 정리하고 있다.

또한 마지막으로 $pdo = null;라는 문장이 있는데, 이는 생성된 PDO 개체를 개방하기 위한 처리이다. PDO 개체를 대입한 변수에 명시적으로 null로 설정하여 데이터베이스와의 연결이 끊어 자원이 개방된다. 또는 아래와 같이 unset 함수로 변수를 개방하여도 같은 기능이 된다.

unset($pdo);