クエリ操作
実際に接続した後のクエリ操作を見てみます。
基本のフォームに入力された値をDBに入れるというのを見てみます。
//DB接続
require_once '../DbManager.php';
try {
$db = getDb();
$stt = $db->prepare('INSERT INTO book
(isbn,
title,
price
) VALUES(
:isbn,
:title,
:price
)');
$stt->bindValue(':isbn', $_POST['isbn']);
$stt->bindValue(':title', $_POST['title']);
$stt->bindValue(':price', $_POST['price']);
$stt->execute();
$db = NULL;
} catch(PDOException $e) {
die("エラーメッセージ:{$e->getMessage()}");
}
header('Location: http://'.$_SERVER['HTTP_HOST'].
dirname($_SERVER['PHP_SELF']).'/戻り先');
データベースに一連の命令を管理するのはPDOStatementオブジェクトの役割です。
PDOStatementオブジェクトprepareメソッドで呼び出せます。
prepareメソッドに含まれる:名前はプレイスホルダです。
PDO::prepareは文を実行する準備を行い、文オブジェクトを返します。
下のexecute() メソッドによって実行される SQL ステートメントを準備していると思えばいいでしょう。
このプレイスホルダ、実際に数た足りないとかDBにないと実行時にエラーになりますので、注意してください。
1回だけ使用するようなSQL文をデータベースへ送信するにはPDOクラスで用意されている"query"メソッドを使います。
早速テストしてみます。
ここでは用意されたスキーマ->テーブルのレコードを削除してみます。
//先程外部ファイルにしたファイルを読み込ませます。
require_once 'db/db.php';
try {
$db = getDb();
//ここではサンプルというスキーマ内の
//testというテーブルにいれます。
$sql = 'INSERT INTO `sample`.`test` (`id`, `name`) VALUES (NULL, \'hogehoge\');';
$st = $db->query($sql);
} catch ( PDOException $e) {
die("エラーメッセージ:{$e->getMessage()}");
}
エラーとしてMySQLのsyntaxエラーで躓くケースがありますが、
こちらは
MySQLを適度に参照しましょう。
次にデータの取得を見てみます。
基本構文は下記です。
PDOStatement::fetch
mixed PDOStatement::fetch ([int fetch_style
[, int cursor_orientation [, int cursor_offset]]])
PDOStatementオブジェクトに関連付けられた結果セットから1行取得します。
fetch_style パラメータは、PDO がその行をどの様に返すかを決定します。
引数:fetch_style 次のレコードを呼び出し元に返す方法を制御します。 この値は、
PDO::FETCH_* 定数のどれかで、 PDO::FETCH_BOTHがデフォルトです。
cursor_orientation スクロール可能なカーソルを表す PDOStatement オブ
ジェクトの場合、 この値により呼び出し側に返される行を定義します。こ
の値は、PDO::FETCH_ORI_* 定数のどれかと する必要があり、
PDO::FETCH_ORI_NEXT がデフォルトとなっています。
offset
スクロール可能なカーソルを表すPDOStatementオブジェクトの場合で、
cursor_orientationパラメータが PDO::FETCH_ORI_ABSに設定された場合、
この値により 取得される結果セットの行の絶対位置が指定されます。
返り値:
配列やオブジェクトなどが返されます。
先程入れたテーブルで読み込んでみます。
//接続します。
require_once 'db/db.php';
require_once 'db/encode.php';
try {
$db = getDb();
$sql = "SELECT * FROM `test` ";
$st = $db->query($sql);
//ここで出力します。
while($result = $st->fetch(PDO::FETCH_ASSOC)){
echo ($result['id']);
echo ($result['name']);
}
} catch ( PDOException $e) {
die("エラーメッセージ:{$e->getMessage()}");
}
ここで、PDO::FETCH_NUMとPDO::FETCH_ASSOCとPDO::FETCH_BOTHというのがあります。
テストしてみます。
$result = $st->fetch(PDO::FETCH_NUM);
echo ($result['0']);
echo ($result['1']);
上記PDO::FETCH_NUMを指定した場合には0から始まるカラム番号を添字とする配列を返します。
$result = $st->fetch(PDO::FETCH_ASSOC);
echo ($result['id']);
echo ($result['name']);
PDO::FETCH_ASSOCを指定した場合にはカラム名で添字を付けた配列を返します。
$result = $st->fetch(PDO::FETCH_BOTH);
echo ($result['id']);
echo ($result['name']);
デフォルトのPDO::FETCH_BOTHの場合には、どちらの形でもアクセス可能な配列を返してくれます。
//この記事は編集中です。