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);