はじめに
PDOについてまとめる・3回目
結果セットの取得
結果セットとは、SQLのSELECT命令によって、一個または複数のテーブルから取り出されたレコード群を保持するために、メモリ上に用意された仮想テーブルのことを言う。
以下はbookテーブルの内容をテーブルに整形&表示するコード。
result.php
<?php
require_once '../DbManager.php';
require_once '../Encode.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>結果セット</title>
</head>
<body>
<table>
<thead>
<tr>
<th>ISBNコード</th>
<th>署名</th>
<th>価格</th>
<th>出版社</th>
<th>刊行日</th>
</tr>
</thead>
<tbody>
<?php
try {
$db = getDb();
$stt = $db->query('SELECT * FROM book ORDER BY published DESC');
while ($row = $stt->fetch(PDO::FETCH_ASSOC)) {
?>
<tr>
<td><?= e($row['isbn']) ?></td>
<td><?= e($row['title']) ?></td>
<td><?= e($row['price']) ?>円</td>
<td><?= e($row['publish']) ?></td>
<td><?= e($row['published']) ?></td>
</tr>
<?php
}
} catch (PDOException $e) {
print "エラーメッセージ:{$e->getMessage()}";
}
?>
</tbody>
</table>
</body>
</html>
DbManager.php
<?php
function getDb(): PDO
{
$dsn = 'mysql:dbname=selfphp; host=127.0.0.1; charset=utf8';
$usr = 'selusr';
$passwd = 'selfpass';
$db = new PDO($dsn, $usr, $passwd);
return $db;
}
レコードポインター
レコードポインターとは、現在読み込み可能なレコードを表す内部的な目印のこと。
execute
メソッドによって結果セットが生成された直後のタイミングで、レコードポインターは先頭行の直前を示している。PDOStatementオブジェクトでは、レコードポインターを次のレコードに移動しながら、移動した先のレコードを読み込むためにfetchメソッド
を使う。
fetchメソッド
PDOStatement::fetch([int $style = PDO::FETCH_BOTH]) : mixed
$style: フェッチモード
フェッチモードとは、結果セットから取りだしたデータをどのような形式の変数に格納するかを表すパラメーター。
result.phpではPDO::FETCH_ASSOC
を指定することで連想配列の形式で変数に格納している。