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->queryselect * from sampletableを実行し、得られた結果をfetchで取り出してテーブルにまとめている。

また最後に$pdo = null;という文がある。これは作成されたPDOオブジェクトを解放するための処理である。PDOオブジェクトを代入した変数に明示的にnullを設定することで、データベースとの接続が切断され、リソースが解放される。また、次のようにunset関数で変数を解放しても同じ働きになる。

unset($pdo);