※当サイトの記事には、広告・プロモーションが含まれます。

PHP5.1.0から導入されたPHP Data Objects (PDO) 拡張モジュールとPDOクラス(データベース接続)

PDO(PHP Data Object)って何じゃらほい。

「SimpleXML」と「JSON」で共通データ形式を便利に (2/2)- @IT によりますと、

f:id:ts0818:20180114143739g:plain

というように、データベースの種類が異なったとしても、それぞれのPDOドライバを用意しておけば、PDOコアモジュールが提供するAPIを使って、PHPからデータベースへ処理を同じように行えるということみたいです。

つまり、使用するデータベースが違ったとしても、同じ処理でデータベースに対して処理を行えるようです。

PDO(PHP Data Object)は、 

  • 抽象レイヤの役割を担うPDOコアモジュール
  • 各DBとの接続を行うPDOドライバモジュール

の2つで構成されているようです。

 

PHP Data Objects (PDO) 拡張モジュール

導入

PHP Data Objects (PDO) 拡張モジュールは、 PHP の中からデータベースにアクセスするための軽量で高性能な インターフェイスを定義します。
PDO インターフェイスを実装する各データベースドライバは、 正規表現関数のようなデータベース固有の機能を提供することができます。
PDO 拡張モジュールによりそのデータベースの全てのデータベース関数を 実行できるわけではないことに注意してください。
データベースサーバーにアクセスするには、 データベース固有の PDO ドライバ を使用する必要があります。

PDO は、データアクセスの抽象化レイヤを提供します。
つまり、使用しているデータベースが何であるかにかかわらず、同じ 関数を使用してクエリの発行やデータの取得が行えるということです。

PDO は、データベースの抽象化を行うのでは ありません。つまり、SQL を書き直したり 存在しない機能をエミュレートしたりはしないということです。
もしそのような機能が必要なら、全体を網羅する (full-blown) 別の抽象化レイヤを使用すべきです。

PDO は PHP 5.1 以降にバンドルされており、PHP 5.0 では PECL 拡張モジュールとして使用可能です。
PDO は PHP 5 の新機能である オブジェクト指向機能を使用しており、それより前のバージョンの PHP では動作しません。

PDO Data Objects(PDO)拡張モジュール は、抽象化レイヤを提供するとなっていますが、じゃあ抽象化レイヤって何かというと、

まず、データベースには、MySQLPostgreSQLOracleなど種類がたくさんあります。

各データベースによって、データベース管理システム(DBMS)が異なります。(データベースを操作するための関数が各々で違ってきます。)

そのDBMSを抽象化することで、DBMSが変わっても同じように扱えるようになります。(データベース操作の関数を統一します。)

つまり、共通の操作インターフェイスAPI)を通して、それぞれのDBMSを操作できるのです。

この共通の操作インターフェイスを抽象化レイヤと呼ぶようです。

 

 

⇩  抽象化レイヤなどに関して詳しくは下記サイトへ

仕事で使える魔法のLAMP(30):PHPでデータベースを使う準備をする - @IT

technotype

 

DBMSdatabase management system / データベース管理システム

コンピュータデータベースを構築するために必要なデータベース運用、管理のためのシステム、およびそのソフトウェアのことである。
データベースマネジメントシステムとも呼ばれる。

APIApplication Programming Interface

APIとは、あるコンピュータプログラム(ソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のこと。

個々のソフトウェアの開発者が毎回すべての機能をゼロから開発するのは困難で無駄が多いため、多くのソフトウェアが共通して利用する機能は、OSやミドルウェアなどの形でまとめて提供されている。

そのような汎用的な機能を呼び出して利用するための手続きを定めたものがAPIで、個々の開発者はAPIに従って機能を呼び出す短いプログラムを記述するだけで、自分でプログラミングすることなくその機能を利用したソフトウェアを作成することができる。

近年ではネットワークを通じて外部から呼び出すことができるAPIを定めたソフトウェアも増えており、遠隔地にあるコンピュータの提供する機能やデータを取り込んで利用するソフトウェアを開発することができる。

 

抽象化レイヤ(PHP Data Objects)の中の機能の1つ『PDOクラス』

PHPマニュアル(PHP:抽象化レイヤー - Manual)によると、

の4つの抽象化レイヤがあり、そのうちの1つが『PHP Data Objects』で、この中の機能の1つが、

『PDOクラス』ということらしいです。

他にもたくさんの機能があるので、気になる人は PHP: PDO - Manual へ。

 

『$dbh = new PDO( );』の引数について

データベースに接続するときに書く下記の記述は、

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

PHP Data Objectsという抽象化レイヤの中の機能の1つ『PDOクラス』、そのインスタンス(オブジェクト) を生成して、そのクラスのメンバ(プロパティ、メソッド)を呼び出していたということだったようです。

 

コンストラクタ(__construct)

クラスのインスタンスが生成されたタイミングで自動的に呼ばれるメソッド。

コンストラクタとは反対に、デストラクタ(__destruct)があります。

コンストラクタとデストラクタは省略可能で、定義を記述しなければなにも呼びだされません。

PHP: コンストラクタとデストラクタ - Manual

 

PDO( )の引数については、PHPマニュアル(PHP: PDO::__construct - Manual )によると

PDO::__construct

(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)

PDO::__constructデータベースへの接続を表す PDO インスタンスを生成する

説明

public PDO::__construct ( string $dsn [, string$username [, string $password [, array $options ]]] )

指定されたデータベースへの接続を表す PDO インスタンスを生成します。 

パラメータ(引数) ¶

dsn($dsn)[データ型: string](必須)

データソース名(Data Source Name)またはDSN。
データベースに接続するために 必要な情報が含まれます。

一般に、DSNはPDOドライバ名の後にコロンが続き、 各PDOドライバに固有の接続構文が続きます。
より多くの情報はPDO driver-specific documentation にあります。

dsn パラメータは、データベースへの接続を生成する ために必要な引数を指定する方法として、3種類の方法をサポートします。

ドライバ呼び出し

dsn に完全な DSN を指定します。

URI 呼び出し

dsn は、uri: の後に DSN 文字列を含むファイルの位置を定義する URI が続く形式となります。
この URI には、ローカルファイルまたはリモート URL を指定することができます。

uri:file:///path/to/dsnfile

エイリアス

dsn は、DSN 文字列を定義する php.inipdo.dsn.name へマップする名前 name からなります。

注意:

エイリアスは、.htaccesshttpd.conf ではなく、 php.ini で定義する必要があります。

username($username)[データ型: string](必須)

DSN 文字列のユーザー名。
このパラメータは、いくつかの PDO ドライバではオプションです。

password($password)[データ型: string](必須)

パスワード。
DSN 文字列で必要とされる場合に指定。

options($options)[データ型: arrray]

ドライバ固有の接続オプションを指定するキー => 値の配列。

返り値

成功時に PDO オブジェクトを返します。

エラー / 例外

PDO::__construct( ) は、 指定されたデータベースへの接続に失敗した場合、 PDOException を投げます。

例1 ドライバ呼び出しにより PDO インスタンスを生成する 

<?php
/* ドライバ呼び出しを使用して ODBC データベースに接続する。 */
// 127.0.0.1はlocalhost、『host=localhost』でも可。
// PHP5.3.6以降でcharsetの指定が可能になりました。
$dsn 'mysql:dbname=testdb;host=127.0.0.1;charset=utf8';
$user 'dbuser';
$password 'dbpass';
// ctath(例外クラス名 変数名)。
// 変数名は、例外クラス名のインスタンス(オブジェクト)。
// 最も簡単な例外の使い方は、すべての例外の基底となるExceptionクラスを使うこと。
// PDOExceptionは、Exceptionクラスを継承したRuntimeExceptionを継承したクラス。
try {
    
$dbh = new PDO($dsn$user$password);
} catch (
PDOException $e) {
    echo 
'Connection failed: ' $e->getMessage();
}

?>
 

PDOstatementクラスと定義済み定数

そして、PDOクラスを使っていて出てくる『prepare( )』,『query( )』などはPDOクラスのメソッドですが、実行すると、結果セットをPDOStatementクラスのオブジェクトとして返すとあります。

 

つまり、『prepare( )』,『query( )』などのメソッドで『コンストラクタ(__construct)』みたいなのが定義されてるのか分かりませんが、『prepare( )』,『query( )』などのメソッドを実行すると、自動的に『new PDOStatement( )』されてPDOStatementクラスのオブジェクトができ、

『execute( )』,『bindParam( )』,『fetch(PDO::FETCH_ASSOC)』などは、PDOStatementクラスのメンバ(プロパティ、メソッド)ということらしいです。

 

例1 名前付けされたプレースホルダを用いてプリペアドステートメントを実行する

<?php
/* バインドされた PHP 変数によってプリペアドステートメントを実行する */
$calories 150;
$colour 'red';
/* prepare()を実行します */
/* SQLの結果セットをPDOStatementクラスのオブジェクトとして返します */
$sth $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour'
);
/* PDOStatementクラスのbindParam()メソッドを実行します */
$sth->bindParam(':calories'$caloriesPDO::PARAM_INT);
$sth->bindParam(':colour'$colourPDO::PARAM_STR12);
/* PDOStatementクラスのexecute()メソッドを実行します */
$sth->execute();
?>

 

⇩  PDOStatementクラスについて

PHP: PDOStatement - Manual

 

⇩  PDOクラスについて

PHP: PDO - Manual

 

⇩  スコープ定義演算子については下記へ

PHP: スコープ定義演算子 (::) - Manual

 

ただ、そうなると、『fetch(PDO::FETCH_ASSOC)』の中で、『スコープ定義演算子::)』でPDOクラスのFETCH_ASSOCにアクセスってなってるんですが、PDOクラスにそんなメンバ(プロパティ、メソッド)見当たらないんですが・・・。

そうしたら、PHP: 自動的に定義される定数 - Manual にこんな説明が

自動的に定義される定数

PHPには実行されるスクリプトで使用可能な多くの 定義済みの定数があります。
しかし、これらの定数の多くは、種々の拡張モジュールにより作成され、 動的なロードやコンパイル時の組込みにより、これらの拡張モジュールが 使用可能である場合にのみ定義されます。

使われ方によって変化する自動的に定義される定数(マジカル定数)が 8 つあります。
例えば、__LINE__スクリプト上において 呼び出された行番号です。特別定数は大文字小文字を区別しません。 内容は以下のとおりです:

PHP の "マジック" 定数
名前 説明
__LINE__ ファイル上の現在の行番号。
__FILE__ ファイルのフルパスとファイル名 (シンボリックリンクを解決した後のもの)。
インクルードされるファイルの中で使用された場合、インクルードされるファイルの名前が返されます。
__DIR__ そのファイルの存在するディレクトリ。
include の中で使用すると、 インクルードされるファイルの存在するディレクトリを返します。
つまり、これは dirname(__FILE__) と同じ意味です。
ルートディレクトリである場合を除き、ディレクトリ名の末尾にスラッシュはつきません。
__FUNCTION__ 関数名。
__CLASS__ クラス名。
クラス名には、そのクラスが宣言されている名前空間も含みます (例 Foo\Bar)。
PHP 5.4 以降では、__CLASS__ がトレイトでも使えることに注意しましょう。
トレイトのメソッド内で __CLASS__ を使うと、そのトレイトを use しているクラスの名前を返します。
__TRAIT__ トレイト名 トレイト名には、宣言された名前空間も含みます (例 Foo\Bar)。
__METHOD__ クラスのメソッド名。
__NAMESPACE__ 現在の名前空間の名前。

get_class( ), get_object_vars( ), file_exists( ), function_exists( )も参照してください。

変更履歴

バージョン 説明
5.4.0 __TRAIT__ が追加されました。
5.3.0 __DIR____NAMESPACE__ が追加されました。
5.0.0 __METHOD__ が追加されました。
5.0.0 これより前のバージョンでは、マジック定数のうちのいくつかが、常に小文字化されていました。
このバージョン以降は、すべて大文字小文字を区別する (宣言したとおりに設定される) ようになります。
4.3.0 __FUNCTION____CLASS__ が追加されました。
4.0.2 __FILE__ に常に絶対パスを含め、シンボリックリンクも解決するようになりました。
これより前のバージョンでは、場合によっては相対パスが含まれていることもありました。

 つまり、『PHP Data Objects (PDO) 拡張モジュール』によって、定義済みの定数が用意されてるらしいです。

 

そして、『PDO::FETCH_ASSOC』は PHP: 定義済み定数 - Manual の下記に記述が

 

定義済み定数

以下の定数が定義されています。
この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

警告

PHP 5.1 以降、PDO はクラス定数を使用します。
それ以前のリリースでは、PDO_PARAM_BOOL の形式のグローバル変数を使用します。

PDO::PARAM_BOOL (integer)
ブールデータ型を表します。
PDO::PARAM_NULL (integer)
SQL NULL データ型を表します。
PDO::PARAM_INT (integer)
SQL INTEGER データ型を表します。
PDO::PARAM_STR (integer)
SQL CHAR, VARCHAR, または他の文字列データ型を表します。
PDO::PARAM_LOB (integer)
SQL ラージオブジェクト型を表します。
PDO::PARAM_STMT (integer)
PDO::PARAM_INPUT_OUTPUT (integer)
パラメータがストアドプロシージャ用の入力パラメータであることを指定します。 この値は、PDO::PARAM_* データ型とのビットORとして指定する必要があります。
PDO::FETCH_LAZY (integer)
取得する方法として、 結果セットが返すカラム名と同じ名前の変数を有するオブジェクトとして各行を返す方法を 指定します。 PDO::FETCH_LAZY は、アクセスされたものと同じ名前のオブジェクト変数を作成します。PDOStatement::fetchAll() の中では使えません。
PDO::FETCH_ASSOC (integer)
結果セットの対応するカラム名にふられているものと同じキーを付けた 連想配列として各行を返す取得方法を指定します。 もし結果セットが複数のカラムを同名で含む場合、PDO::FETCH_ASSOCカラム名毎に 1 つの値のみ返します。
PDO::FETCH_NAMED (integer)
結果セットの対応するカラム名にふられているものと同じキーを付けた 連想配列として各行を返す取得方法を指定します。 もし結果セットが複数のカラムを同名で含む場合、PDO::FETCH_NAMEDカラム名毎に値の配列を返します。
PDO::FETCH_NUM (integer)
結果セットの対応するカラム番号にふられているものと同じ添字を付けた 配列として各行を返す取得方法を指定します。番号は0から始まります。
PDO::FETCH_BOTH (integer)
結果セットと同じカラム名と0から始まるカラム番号を付けた配列として各行を返す 方法を指定します。
PDO::FETCH_OBJ (integer)
結果セットが返すカラム名と同じ名前のプロパティを有する オブジェクトとして各行を返す方法を指定します。
PDO::FETCH_BOUND (integer)
結果セットのカラムの値を PDOStatement::bindParam() または PDOStatement::bindColumn() メソッドでバインドされた PHP変数に代入し、TRUEを返すという取得方法を指定します。
PDO::FETCH_COLUMN (integer)
結果セットの次の行から指定された一つのカラムのみを返す取得方法を指定します。
PDO::FETCH_CLASS (integer)
カラムをクラスのプロパティにマップしつつ、 指定されたクラスの新規インスタンスを返す取得方法を指定します。

注意: 要求されたクラスにプロパティが存在しない場合は、マジックメソッド __set() がコールされます。

PDO::FETCH_INTO (integer)
カラムをクラスのプロパティにマップしつつ、 指定されたクラスの既存のインスタンスを更新する取得方法を指定します。
PDO::FETCH_FUNC (integer)
データをその場で扱う方法を完全にカスタマイズできるようにします (PDOStatement::fetchAll() の中でしか使えません)。
PDO::FETCH_GROUP (integer)
値で返すグループ。 PDO::FETCH_COLUMN あるいはPDO::FETCH_KEY_PAIR と組み合わせます。
PDO::FETCH_UNIQUE (integer)
一意な値だけを取得します。
PDO::FETCH_KEY_PAIR (integer)
ふたつのカラムからなる結果を配列で取得します。最初のカラムの値がキー、二番目のカラムの内容が値となります。 PHP 5.2.3 以降で使用可能です。
PDO::FETCH_CLASSTYPE (integer)
最初のカラムの値からクラス名を決定します。
PDO::FETCH_SERIALIZE (integer)
PDO::FETCH_INTO と同様ですが、 シリアライズした文字列としてオブジェクトを提供します。 PHP 5.1.0 以降で使用可能です。 PHP 5.3.0 以降、このフラグを設定した場合はコンストラクタが呼ばれないようになりました。
PDO::FETCH_PROPS_LATE (integer)
コンストラクタを呼んでからプロパティを設定します。 PHP 5.2.0 以降で使用可能です。
PDO::ATTR_AUTOCOMMIT (integer)
この値が FALSE の場合、PDO は接続がトランザクションを開始できるように オートコミットを無効にしようとします。
PDO::ATTR_PREFETCH (integer)
独自アプリケーションにおけるメモリ使用量に対する速度のバランスを 調整するためのプリフェッチサイズを設定します。 全てのデータベースとドライバの組み合わせでプリフェッチサイズの設定を サポートしているわけではありません。
PDO::ATTR_TIMEOUT (integer)
データベースとの通信に対するタイムアウト値を秒で設定します。
PDO::ATTR_ERRMODE (integer)
PDO::ATTR_SERVER_VERSION (integer)
PDO::ATTR_CLIENT_VERSION (integer)
PDO::ATTR_SERVER_INFO (integer)
PDO::ATTR_CONNECTION_STATUS (integer)
PDO::ATTR_CASE (integer)
PDO::CASE_* 定数で指定されたケースにカラム名を変更します。
PDO::ATTR_CURSOR_NAME (integer)
PDO::ATTR_CURSOR (integer)
PDO::ATTR_DRIVER_NAME (string)
ドライバ名を返します。

 

例1 PDO::ATTR_DRIVER_NAME の使用例

<?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
  echo 
"mysql 上で動作しています。何か mysql 固有のことをここで行います\n";
}
?>
PDO::ATTR_ORACLE_NULLS (integer)
空文字を SQL の NULL 値に変換します。
PDO::ATTR_PERSISTENT (integer)
新規接続を生成するよりもむしろ持続的接続を要求します。
PDO::ATTR_STATEMENT_CLASS (integer)
PDO::ATTR_FETCH_CATALOG_NAMES (integer)
結果セット中の各カラム名にカタログ名を追加します。 カタログ名とカラム名は、小数点 (.) で区切られます。
PDO::ATTR_FETCH_TABLE_NAMES (integer)
結果セット中の各カラム名にテーブル名を追加します。 テーブル名とカラム名は、小数点 (.) で区切られます。
PDO::ATTR_STRINGIFY_FETCHES (integer)
PDO::ATTR_MAX_COLUMN_LEN (integer)
PDO::ATTR_DEFAULT_FETCH_MODE (integer)
PHP 5.2.0 以降で使用可能です。
PDO::ATTR_EMULATE_PREPARES (integer)
PHP 5.1.3 以降で使用可能です。
PDO::ERRMODE_SILENT (integer)
エラー時にエラーもしくは例外を発生しません。 開発者の方は明示的にエラーをチェックするようにしてください。 これはデフォルトのモードです。
PDO::ERRMODE_WARNING (integer)
エラーが発生した場合、PHPE_WARNING メッセージを発行します。
PDO::ERRMODE_EXCEPTION (integer)
エラーが発生した場合、PDOException を投げます。
PDO::CASE_NATURAL (integer)
カラム名をデータベースドライバにより返されたままにします。
PDO::CASE_LOWER (integer)
カラム名を小文字にします。
PDO::CASE_UPPER (integer)
カラム名を大文字にします。
PDO::NULL_NATURAL (integer)
PDO::NULL_EMPTY_STRING (integer)
PDO::NULL_TO_STRING (integer)
PDO::FETCH_ORI_NEXT (integer)
結果セットの次の行を取得します。スクローラブルなカーソルでのみ有効です。
PDO::FETCH_ORI_PRIOR (integer)
結果セットの前の行を取得します。スクローラブルなカーソルでのみ有効です。
PDO::FETCH_ORI_FIRST (integer)
結果セットの先頭の行を取得します。スクローラブルなカーソルでのみ有効です。
PDO::FETCH_ORI_LAST (integer)
結果セットの最後の行を取得します。スクローラブルなカーソルでのみ有効です。
PDO::FETCH_ORI_ABS (integer)
結果セットから行番号で指定した行を取得します。スクローラブルなカーソルでのみ有効です。
PDO::FETCH_ORI_REL (integer)
結果セットのカーソルの現在の位置を基準とする相対位置により指定された行を 取得します。スクローラブルなカーソルでのみ有効です。
PDO::CURSOR_FWDONLY (integer)
前進のみ可能なカーソルを有する PDOStatement オブジェクトを生成します。 これにより、アプリケーションの性能は改善しますが、 PDOStatementオブジェクトは前方にある結果セットから一度に一行を 取得するという制約を受けます。
PDO::CURSOR_SCROLL (integer)
スクローラブルカーソルを有する PDOStatement オブジェクトを作成します。 結果セットから取得した行を制御するための PDO::FETCH_ORI_* 定数を指定して ください。
PDO::ERR_CANT_MAP (integer)
PDO::ERR_SYNTAX (integer)
PDO::ERR_CONSTRAINT (integer)
PDO::ERR_NOT_FOUND (integer)
PDO::ERR_ALREADY_EXISTS (integer)
PDO::ERR_NOT_IMPLEMENTED (integer)
PDO::ERR_MISMATCH (integer)
PDO::ERR_TRUNCATED (integer)
PDO::ERR_DISCONNECTED (integer)
PDO::ERR_NO_PERM (integer)
PDO::ERR_NONE (string)
SQLSTATE '00000' は SQL ステートメントがエラーや警告がなく発行に成功したことを意味します。 この定数はエラーが発生したかどうかを判別するために PDO::errorCode() もしくは PDOStatement::errorCode() をチェックする際に 便利です。この場合、通常はエラー状態を発生したメソッドからの戻りコードを 検査することによって検知します。
PDO::PARAM_EVT_ALLOC (integer)
割り当てられたときに発生するイベント。
PDO::PARAM_EVT_FREE (integer)
割り当てが解除されたときに発生するイベント。
PDO::PARAM_EVT_EXEC_PRE (integer)
プリペアドステートメントの実行前に発生するイベント。
PDO::PARAM_EVT_EXEC_POST (integer)
プリペアドステートメントの実行後に発生するイベント。
PDO::PARAM_EVT_FETCH_PRE (integer)
結果セットから結果を取得する前に発生するイベント。
PDO::PARAM_EVT_FETCH_POST (integer)
結果セットから結果を取得した後に発生するイベント。
PDO::PARAM_EVT_NORMALIZE (integer)
バインドパラメータの登録時に発生するイベント。 これにより、ドライバがパラメータ名を正規化できるようになります。

 

これらが、PDOクラスのクラス定数ということらしいです。

クラス定数は『const』でクラス内に定義するものって思ってたんですが、

PHP: オブジェクト定数 - Manual には、『インターフェイスに定数を持たせることもできます。』って書いてあったんで、インターフェイスで定義してるってことかしら?

 

⇩  インターフェイスの定数については下記へ

PHP: オブジェクト インターフェイス - Manual

 

 

⇩  コアの定義済みの定数

PHP: 定義済みの定数 - Manual (コアの定義済みの定数)

⇩ エラー処理の定義済みの定数

PHP: 定義済み定数 - Manual (エラー処理の定義済み定数)

 ただ、PDOクラスのメソッドで、

PDO::setAttribute

(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)

PDO::setAttribute属性を設定する

説明

public bool PDO::setAttribute ( int $attribute , mixed$value )

データベースハンドルの属性を設定します。
利用可能な通常の属性は以下の一覧の通りです。
いくつかのドライバでは、 ドライバ固有の属性を使用することが可能です。

  • PDO::ATTR_CASE: 強制的にカラム名を指定したケースにする

    • PDO::CASE_LOWER: 強制的にカラム名を小文字にする

    • PDO::CASE_NATURAL: データベースドライバによって返されるカラム名をそのままにする

    • PDO::CASE_UPPER: 強制的にカラム名を大文字にする

  • PDO::ATTR_ERRMODE: エラーレポート

    • PDO::ERRMODE_SILENT: エラーコードのみ設定する

    • PDO::ERRMODE_WARNING: E_WARNING を発生させる

    • PDO::ERRMODE_EXCEPTION: 例外 を投げる

  • PDO::ATTR_ORACLE_NULLS (Oracle だけでなく、全てのドライバで利用可能): NULL と空文字列の変換

    • PDO::NULL_NATURAL: 変換しない

    • PDO::NULL_EMPTY_STRING: 空文字は NULL に変換される

    • PDO::NULL_TO_STRING: NULL は空文字に変換される

  • PDO::ATTR_STRINGIFY_FETCHES: フェッチする際、数値を文字列に変換する。bool を必要とする

  • PDO::ATTR_STATEMENT_CLASS: PDOStatement に由来するユーザーが提供するステートメントクラスを設定する。 永続的な PDO インスタンスは使用できない。 array(string classname, array(mixed constructor_args)) を必要とする。

  • PDO::ATTR_TIMEOUT: タイムアウト秒数を指定する。すべてのドライバがこのオプションに対応しているわけではなく、 またドライバによってこのオプションの扱いは異なる。たとえば sqlite は書き込み可能なロックを確保するのをこの秒数まで待ち続けるが、 他のドライバではこの秒数を接続時のタイムアウトや読み込みのタイムアウトとして扱うこともある。 int を渡す。

  • PDO::ATTR_AUTOCOMMIT (OCI, Firebird そして MySQL で利用可能): それぞれの単一文で自動コミットするかどうか。

  • PDO::ATTR_EMULATE_PREPARES プリペアドステートメントのエミュレーションを有効または無効にする。 ドライバによってはネイティブのプリペアドステートメントをサポートしていなかったり 完全には対応していなかったりするものがある。この設定を使うと、常に プリペアドステートメントをエミュレートする (TRUE の場合) か、 ネイティブのプリペアドステートメントを使おうとする (FALSE の場合) かを設定できる。現在のクエリを正しく準備できなかった場合は、常にエミュレート方式を使う。 bool で指定する。

  • PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (MySQL で利用可能): バッファされたクエリを使用する。

  • PDO::ATTR_DEFAULT_FETCH_MODE: デフォルトのフェッチモードを設定する。
    このモードについての説明はPDOStatement::fetch( ) のドキュメントを参照。

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。 

 

ってなってるんで、『PDOStatementクラス』の『fetch( )メソッド』の説明では、

 

PDOStatement::fetch( )

(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)

PDOStatement::fetch結果セットから次の行を取得す

説明

public mixed PDOStatement::fetch ([ int $fetch_style[, int $cursor_orientation = PDO::FETCH_ORI_NEXT [,int $cursor_offset = 0 ]]] )

PDOStatementオブジェクトに関連付けられた結果セットから1行取得します。
fetch_style パラメータは、PDO がその行をどの様に返すかを決定します。

パラメータ

fetch_style($fetch_style)[データ型:int]

次のレコードを呼び出し元に返す方法を制御します。
この値は、PDO::FETCH_* 定数のどれかで、 デフォルトはPDO::ATTR_DEFAULT_FETCH_MODE の値 (そのデフォルトはPDO::FETCH_BOTH) です。

  • PDO::FETCH_ASSOC: は、結果セットに 返された際のカラム名で添字を付けた配列を返します。

  • PDO::FETCH_BOTH (デフォルト): 結果セットに返された際のカラム名と 0 で始まるカラム番号で添字を付けた配列を返します。

  • PDO::FETCH_BOUND: TRUE を返し、結果セットのカラムの値を PDOStatement::bindColumn() メソッドでバインドされた PHP 変数に代入します。

  • PDO::FETCH_CLASS: 結果セットのカラムがクラス内の名前付けされたプロパティに マッピングされている、要求されたクラスの新規インスタンスを返します。
    fetch_style に PDO::FETCH_CLASSTYPE が 含まれている場合 (例: PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE) は、最初のカラムの値から クラス名を決定します。

  • PDO::FETCH_INTO: 結果セットのカラムがクラス内の名前付けされたプロパティに マッピングされている要求された既存インスタンスを更新します。

  • PDO::FETCH_LAZY: PDO::FETCH_BOTHPDO::FETCH_OBJの 組合せで、オブジェクト変数名を作成します。

  • PDO::FETCH_NAMED: PDO::FETCH_ASSOC と同じ形式の配列を返します。
    ただし、同じ名前のカラムが複数あった場合は、そのキーが指す値は、 同じ名前のカラムのすべての値を含む配列になります。

  • PDO::FETCH_NUM: 結果セットに返された際の 0 から始まるカラム番号を添字とする配列を返します。

  • PDO::FETCH_OBJ: 結果セットに返された際のカラム名と同名のプロパティを有する 匿名のオブジェクトを返します。

cursor_orientation($cursor_orientation)[データ型:int]

スクロール可能なカーソルを表す PDOStatement オブジェクトの場合、 この値により呼び出し側に返される行を定義します。
この値は、PDO::FETCH_ORI_* 定数のどれかと する必要があり、 PDO::FETCH_ORI_NEXT がデフォルトとなっています。
PDOStatement に対してスクロール可能なカーソルを要求するためには、 PDO::prepare() を用いて SQL ステートメントを 準備する際、 PDO::CURSOR_SCROLLPDO::ATTR_CURSOR 属性を設定する必要があります。

offset($cursor_offset)[データ型:int]

スクロール可能なカーソルを表すPDOStatementオブジェクトの場合で、 cursor_orientationパラメータがPDO::FETCH_ORI_ABSに設定された場合、この値により 取得される結果セットの行の絶対位置が指定されます。

スクロール可能なカーソルを表すPDOStatementオブジェクトの場合で、 cursor_orientationパラメータがPDO::FETCH_ORI_RELに設定された場合、この値は、PDOStatement::fetch( ) がコールされる前のカーソルの 位置を基準として取得する行の位置を指定します。

返り値

この関数が成功した場合の返り値は、取得形式によって異なります。
失敗した場合は常に FALSE を返します。

PDO::FETCH_*定数のデフォルト値がPDO::ATTR_DEFAULT_FETCH_MODEで決められてるらしいんですが、結局、その PDO::FETCH_*定数ってどこで作られたんですかっていう、スッキリしない終わり方になりました。

一応、PDOクラスについては下記。

 ⇩  詳しくはPHPマニュアルへ

PHP: PDO - Manual

PDO クラス

(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 

導入

PHP とデータベースサーバーの間の接続を表します。 

クラス概要

 
PDO {
public __construct ( string $dsn [, string$username [, string $password [, array $options ]]] )
public bool beginTransaction ( void )
public bool commit ( void )
public mixed errorCode ( void )
public array errorInfo ( void )
public int exec ( string $statement )
public mixed getAttribute ( int $attribute )
public static array getAvailableDrivers ( void )
public bool inTransaction ( void )
public string lastInsertId ([ string $name = NULL ] )
public PDOStatement prepare ( string $statement [,array $driver_options = array() ] )
public PDOStatement query ( string $statement )
public string quote ( string $string [, int$parameter_type = PDO::PARAM_STR ] )
public bool rollBack ( void )
public bool setAttribute ( int $attribute , mixed$value )

 

}

目次

 

 

今回はこのへんで。