結果リソースからデータを取得するには、次の fetchInto() 、 fetchOne() 、 fetchRow() 、 fetchCol() および fetchAll() のいずれかのメソッドを使用します。 これらのメソッドのうち、fetchOne() 以外はすべてデータを (多次元の) 配列に格納します。 データがもうない場合には NULL、エラーが発生した場合には MDB_Error を返します。 fetch() で始まるすべてのメソッドは、結果セットを自動的に開放します。
例 39-1結果セットの取得
|
以下の取得モードがサポートされています。
MDB_FETCHMODE_ORDERED (デフォルト)
fetch*() は順番に並べられた配列を返します。 並び順は SELECT 文で指定されたものです。
例 39-2順番に並べられた配列の取得
|
MDB_FETCHMODE_ASSOC
カラム名をキーとする連想配列を返します。
例 39-3Fetch a assoc. array
|
取得モードは、コールの際に設定することもできますし、 MDB インスタンスの作成時に指定することもできます。
例 39-4コールの際の指定
|
例 39-5インスタンス単位での指定
|
PEAR MDB では、取得ステートメントに対して追加のパラメータを指定することができます。 これを用いると、行番号を指定して行を取得することができるようになります。 これは、結果全体の一部のみを表示したい場合 (ページ処理をした HTML のリストなど) や、取得した行を特別な順番で表示したい場合などに便利です。
例 39-6番号指定による取得
|
処理が終わったら、結果セットの後始末をしておくことを推奨します。 これにより、メモリが節約できます。後始末には freeResult() を使用します。
例 39-7開放
|
MDB では、クエリからの情報を簡単に取得するための特別な方法を提供しています。 これを使用すると、 fetch*() の結果をループさせる必要がなくなります。
queryOne() は、クエリの最初のカラムの最初の結果を取得します。
$numrows = $db->queryOne('select count(id) from clients'); |
queryRow() は、最初の行を配列で返します。
$sql = 'select name, address, phone from clients where id=1'; if (is_array($row = $db->queryRow($sql))) { list($name, $address, $phone) = $row; } |
queryCol() は、選択したカラムのデータを配列で返します。 取得したいカラムの番号を二番目のパラメータで指定できます。
$all_client_names = $db->queryCol('SELECT name FROM clients'); |
$all_client_names = array('Stig', 'Jon', 'Colin'); |
getAll() は、クエリから返されたすべての行を取得します。 このメソッドでは追加のパラメータを指定することができ、 対処のカラムをキーとする連想配列で結果を返すこともできます。
$data = getAll('SELECT id, text, date FROM mytable'); /* 返り値はこのようになります。 array( 1 => array('4', 'four', '2004'), 2 => array('5', 'five', '2005'), 3 => array('6', 'six', '2006') ) */ |
query*() 系のメソッドは、 裏方の作業をすべて肩代わりしてくれます。 たとえばクエリの実行、データの取得、結果の開放などです。 PEAR MDB の関数は、エラー時に MDB_Error オブジェクトを返すことを覚えておきましょう。
MDB を使用すると、クエリ結果から以下のようなさまざまな情報を取得することができます。
numRows() : "SELECT" クエリから返された行の総数を返します。
// 行の数 echo $db->numRows($res); |
numCols() : "SELECT" クエリから返された結果のカラムの数を返します。
// カラムの数 echo $db->numCols($res); |
affectedRows() : データ操作系のクエリ ("INSERT"、"UPDATE" あるいは "DELETE") で変更された行の数を返します。
// この文は結果オブジェクトを返さないことに注意しましょう $db->query('DELETE * FROM clients'); echo 'クライアントを ' . $db->affectedRows() . ' 件削除しました'; |
tableInfo() : "SELECT" クエリが返すフィールドについての情報を連想配列で返します。
// テーブルの情報 print_r($db->tableInfo($res)); |