PDOメモ

PDO (PHP Data Object) のメモ。

データベースへの接続

MySQLの場合

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>

SQLiteの場合

<?php
$dbh = new PDO('sqlite:test.db3');
?>

DBへの接続中に何らかのエラーが発生した場合は、PDOExceptionが発生する。
これはtry〜catchで捕捉することができる。

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>

DBへのコネクションは、生成されたPDOオブジェクトの生存期間と同じだけの間持続する。コネクションを明示的に切断するには、PDOオブジェクトにnullを代入する。

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// 何らかの処理

// 処理終了
$dbh = null;
?>

クエリ投入

PDO::query() を呼び出すことによって、単一のSQL文を実行し、その結果がPDOStatementオブジェクトとして返される。

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach ($conn->query('SELECT name, colour, calories FROM fruit ORDER BY name') as $row) {
  print $row['NAME'] . "\t";
  print $row['COLOUR'] . "\t";
  print $row['CALORIES'] . "\n";
}
?>

PDOStatementの主なメソッド

  • PDOStatement::fetch([int $fetch_style [, int $cursor_orientation [, int $cursor_offset]]] ): 検索結果の集合から、次の1行を取り出す。取り出される行の形は、オプション引数 $fetch_style により指定される。
  • array PDOStatement::fetchAll([int $fetch_style [, int $column_index [, array $ctor_args]]]): 検索結果の集合を配列として取得する。配列の要素の形は、オプション引数 $fetch_style により指定される。

$fetch_style の取りうる主な値は以下の通り。

  • PDO::FETCH_ASSOC: カラム名をインデックスとする配列として返す
  • PDO::FETCH_BOTH (デフォルト): カラム名とカラム番号 (0, 1, 2, ...) の両方をインデックスとする配列として返す
  • PDO::FETCH_OBJ: プロパティ名としてカラム名を持つような無名のオブジェクトとして返す