PHPマニュアル/PEARマニュアル | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot

導入 - 取得 | JavaScript入門&応用&リファレンスなら「JavaScriptist」

  

導入 - 取得

導入 - 取得 – クエリからの行の取得

説明

取得用の関数

結果リソースからデータを取得するには、次の 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_FETCHMODE_ORDERED (デフォルト)

    fetch*() は順番に並べられた配列を返します。 並び順は SELECT 文で指定されたものです。

    順番に並べられた配列の取得

    <?php
    $res 
    $db->query('SELECT id, name, email FROM users');
    $row $db->fetchRow($resMDB_FETCHMODE_ORDERED);
    /*
    $row は次のようになります。
    array (
        0 => <column "id" data>,
        1 => <column "name" data>,
        2 => <column "email" data>
    )
    */
    // データにアクセスするには、このようにします。
    $id    $row[0];
    $name  $row[1];
    $email $row[2];
    ?>

  • MDB_FETCHMODE_ASSOC

    カラム名をキーとする連想配列を返します。

    Fetch a assoc. array

    <?php
    $res 
    $db->query('SELECT id, name, email FROM users');
    $row $db->fetchRow($resMDB_FETCHMODE_ASSOC);
    /*
    $row は次のようになります。
    array (
        'id'    => <column "id" data>,
        'name'  => <column "name" data>,
        'email' => <column "email" data>
    )
    */
    // データにアクセスするには、このようにします。
    $id    $row['id'];
    $name  $row['name'];
    $email $row['email'];
    ?>

取得した行の形式の設定

取得モードは、コールの際に設定することもできますし、 MDB インスタンスの作成時に指定することもできます。

コールの際の指定

<?php
while ($row $db->fetchInto($resMDB_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];
    ....
}
?>

結果セットの開放

処理が終わったら、結果セットの後始末をしておくことを推奨します。 これにより、メモリが節約できます。後始末には freeResult() を使用します。

開放

<?php
...
$res $db->query('SELECT * FROM clients');
while (
$row $res->fetchInto($res)) {
...
}
$db->freeResult($res);
?>

手っ取り早いデータ取得

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" のようなエラーメッセージが返された場合は、 使用中のバックエンドではその操作がサポートされていません。

忘却曲線を使ってこの知識を確実に記憶に残す

フォーラムで「導入 - 取得」について話す
各種マニュアル: PHPマニュアル | PEARマニュアル | Smarty(英語)マニュアル | PHP-GTKマニュアル | 導入 - 取得」をGoogle検索
copyright © 1997-2024 PHP ドキュメント作成グループ(ライセンス). provided by php spot. マニュアル: