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

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

  

導入

導入 – データベースのデータを簡単に取得・変更するためのオブジェクト指向インターフェイス

MDB_QueryTool Description

このパッケージは、SQL クエリ言語をオブジェクト指向で抽象化したものです。 setWhere()setOrder()setGroup()setJoin() などのメソッドを提供することで、簡単にクエリを作成できるようにしています。 また、HTML フォームと連携するために、習得しやすいインターフェイスを提供しています。 これはカラムのデータを配列形式で格納したもので、更新や追加はデータベースで行います。 このパッケージは SQL-Builder をもとにしており、 SQL 文の作成や実行が簡単にできるようになります。 MDB および MDB2 がサポートするすべてのデータベースエンジンで利用できます。

これは DB_QueryTool をそのまま移植したものなので、 同じ API が使用できます。違うのはクラス名だけです (当然、コンストラクタの名前も違います)。 残念ながら、完全なドキュメントはまだ用意できていません。

例 1 - 配列

MDB_QueryTool の利用法としてお勧めなのは、 それを継承したクラスを作成することです。以下に例を示します。

<?php
require_once 'MDB/QueryTool.php';
define('TABLE_CARS''cars');
$dsn 'mysql://user:pass@host/dbname';

/**
 * "car" テーブルに、以下のフィールドがあるものとします
 * (id, model, hp, color, clima, price)
 */
class Car extends MDB_QueryTool
{
    var 
$table        TABLE_CARS;
    var 
$sequenceName TABLE_CARS;

    
// デフォルトでこうなりますが、一応書いておきます……
    
var $primaryCol =   'id';

    
/**
     * ここでは、テーブル名に対応する短縮名を割り当てています。
     * これは、テーブル名が変わった際などの対策として必要です。
     * たとえば、プロバイダの db にアプリケーションを配置する際などに
     * 各テーブル名に強制的にプレフィックスをつけられてしまうことがあるかも
     * しれません。そんな場合でも、あなたのアプリケーション内で
     * テーブルの結合条件を指定している部分などを書き換える必要はありません。
     * 実際のテーブル名のかわりに、ここで指定した短縮名が用いられるからです。
     */
    
var $tableSpec = array(
        array(
'name'  => TABLE_CARS'shortName' =>  'cars'),
        
//array('name'  => TABLE_TIME, 'shortName' =>  'time'),
    
);
}


// Car クラスのインスタンスを作成します
$car = new Car($dsn);

// 3 番の車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$res $car->get(3);
var_dump($res);

// すべての車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$res $car->getAll();
var_dump($res);

// 最初の 10 台の車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$res $car->getAll(010);
var_dump($res);

// 色が赤で、快適な車をすべて取得し、価格順に並べます
$car->reset();
$car->setWhere('color="red"');
$car->addWhere('clima=1');
$car->setOrder('price');
$res $car->getAll();
var_dump($res);

// 新しい車をデータベースに追加します
$data = array(
    
'model' => 'Super Trooper',
    
'hp'    => 140,
    
'color' => 'black',
    
'clima' => 0,
    
'price' => 19000
);
$newCarId $car->save($data);
var_dump($newCarId);

// 既存の車の情報を更新します
$data = array(
    
'id'    => $newCarId,
    
'clima' => 1,
    
'price' => 20000,
);
$res $car->save($data);   // $car->update($data); と同じです
var_dump($res);


// データベースから車を削除します
$res $car->remove($newCarId);
var_dump($res);
?>

例 2 - クラス

MDB_QueryTool は、クラスに対して使用することもできます。 使用例は、このようになります。

<?php
require_once 'MDB/QueryTool.php';
define('TABLE_CARS''cars');
$dsn 'mysql://user:pass@host/dbname';

/**
 * "car" テーブルに、以下のフィールドがあるものとします
 * (id, model, hp, color, clima, price)
 */
class Car extends MDB_QueryTool
{
    var 
$table        TABLE_CARS;
    var 
$sequenceName TABLE_CARS;

    
// デフォルトでこうなりますが、一応書いておきます……
    
var $primaryCol =   'id';

    
/**
     * ここでは、テーブル名に対応する短縮名を割り当てています。
     * これは、テーブル名が変わった際などの対策として必要です。
     * たとえば、プロバイダの db にアプリケーションを配置する際などに
     * 各テーブル名に強制的にプレフィックスをつけられてしまうことがあるかも
     * しれません。そんな場合でも、あなたのアプリケーション内で
     * テーブルの結合条件を指定している部分などを書き換える必要はありません。
     * 実際のテーブル名のかわりに、ここで指定した短縮名が用いられるからです。
     */
    
var $tableSpec = array(
        array(
'name'  => TABLE_CARS'shortName' =>  'cars'),
        
//array('name'  => TABLE_TIME, 'shortName' =>  'time'),
    
);
}


// Car クラスのインスタンスを作成します
$car = new Car($dsn);
$car->useResult('object');

// 3 番の車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$res $car->get(3)->fetchRow();
var_dump($res);

// すべての車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$cars $car->getAll();
while (
$res $cars->getNext()) {
    
var_dump($res);
}

// 最初の 10 台の車を取得します
$car->reset();     // クエリビルダをリセットします。where 条件や order
                   // などが初期化されます
$cars $car->getAll(010);
while (
$res $cars->getNext()) {
    
var_dump($res);
}

// 色が赤で、快適な車をすべて取得し、価格順に並べます
$car->reset();
$car->setWhere('color="red"');
$car->addWhere('clima=1');
$car->setOrder('price');
$cars $car->getAll();
while (
$res $cars->getNext()) {
    
var_dump($res);
}

// 新しい車をデータベースに追加します
$newCar $car->newEntity();
$newCar->model 'Super Trooper';
$newCar->hp    140;
$newCar->color 'black';
$newCar->clima 0;
$newCar->price 19000;

$newCarId $newCar->save();
var_dump($newCarId);

// 既存の車の情報を更新します
$car->reset();
$res        $car->get($newCarId)->fetchRow();
$res->clima 1;
$res->price 20000;
$res->save();
var_dump($res);

// データベースから車を削除します
$car->reset();
$res $car->get($newCarId)->fetchRow();
var_dump($res->remove());
unset(
$res);
?>

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

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