クエリ操作

実際に接続した後のクエリ操作を見てみます。
基本のフォームに入力された値を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の場合には、どちらの形でもアクセス可能な配列を返してくれます。 //この記事は編集中です。