取得用の関数
結果リソースからデータを取得するには、次の
fetchInto()
、
fetchOne()
、
fetchRow()
、
fetchCol()
および
fetchAll()
のいずれかのメソッドを使用します。
これらのメソッドのうち、fetchOne()
以外はすべてデータを (多次元の) 配列に格納します。
データがもうない場合には NULL、エラーが発生した場合には
MDB_Error
を返します。
fetch() で始まるすべてのメソッドは、結果セットを自動的に開放します。
<?php
...
$db = MDB::connect($dsn);
$res = $db->query("SELECT * FROM mytable");
// 行がなくなるまで、各行のデータを
// 順に取得します
while ($row = $db->fetchInto($res)) {
$id = $row[0];
}
// 最初の行の最初のカラムだけがほしいのならこのようにします
$id = $db->fetchOne($res);
// fetch 系のメソッドは常に結果セットを開放するので、
// 結果セットをループさせることができません。
// そのかわりに適切なメソッドを選択する必要があります
$data = $db->getAll($res);
foreach($data as $row)
{
$id = $row[0];
}
?>
取得した行の形式の設定
取得モードは、コールの際に設定することもできますし、
MDB インスタンスの作成時に指定することもできます。
<?php
while ($row = $db->fetchInto($res, MDB_FETCHMODE_ASSOC)) {
$id = $row['id'];
}
?>
<?php
$db = MDB::connect($dsn);
// これは、デフォルトの取得モードをこの Pear MDB インスタンス
// (のすべてのクエリ) に対して設定します。
$db->setFetchMode(MDB_FETCHMODE_ASSOC);
$result = $db->query(...);
while ($row = $db->fetchRow($res)) {
$id = $row['id'];
}
?>
行番号の指定による行の取得
PEAR MDB では、取得ステートメントに対して追加のパラメータを指定することができます。
これを用いると、行番号を指定して行を取得することができるようになります。
これは、結果全体の一部のみを表示したい場合
(ページ処理をした HTML のリストなど)
や、取得した行を特別な順番で表示したい場合などに便利です。
<?php
...
// 取得を開始する行
$from = 50;
// ページ単位の表示件数
$resPage = 10;
// このページで取得する最後の行
$to = $from + $resPage;
foreach (range($from, $to) as $rowNum) {
if (!$row = $db->fetchInto($res, $fetchmode, $rowNum)) {
break;
}
$id = $row[0];
....
}
?>
手っ取り早いデータ取得
MDB では、クエリからの情報を簡単に取得するための特別な方法を提供しています。
これを使用すると、
fetch*() の結果をループさせる必要がなくなります。
queryOne()
は、クエリの最初のカラムの最初の結果を取得します。
<?php
$numrows = $db->queryOne('select count(id) from clients');
?>
queryRow()
は、最初の行を配列で返します。
<?php
$sql = 'select name, address, phone from clients where id=1';
if (is_array($row = $db->queryRow($sql))) {
list($name, $address, $phone) = $row;
}
?>
queryCol()
は、選択したカラムのデータを配列で返します。
取得したいカラムの番号を二番目のパラメータで指定できます。
<?php
$all_client_names = $db->queryCol('SELECT name FROM clients');
?>
上の文は、例えばこのような結果を返します。
<?php
$all_client_names = array('Stig', 'Jon', 'Colin');
?>
getAll()
は、クエリから返されたすべての行を取得します。
このメソッドでは追加のパラメータを指定することができ、
対処のカラムをキーとする連想配列で結果を返すこともできます。
<?php
$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" クエリから返された行の総数を返します。
<?php
// 行の数
echo $db->numRows($res);
?>
-
numCols()
: "SELECT" クエリから返された結果のカラムの数を返します。
<?php
// カラムの数
echo $db->numCols($res);
?>
-
affectedRows()
: データ操作系のクエリ ("INSERT"、"UPDATE"
あるいは "DELETE") で変更された行の数を返します。
<?php
// この文は結果オブジェクトを返さないことに注意しましょう
$db->query('DELETE * FROM clients');
echo 'クライアントを ' . $db->affectedRows() . ' 件削除しました';
?>
-
tableInfo()
: "SELECT" クエリが返すフィールドについての情報を連想配列で返します。
<?php
// テーブルの情報
print_r($db->tableInfo($res));
?>
処理の結果が
MDB_Error オブジェクトになっていないかどうかを常に確認するようにしましょう。
"
MDB_Error: database not capable"
のようなエラーメッセージが返された場合は、
使用中のバックエンドではその操作がサポートされていません。