PHPによるプログラミング・ガイド (データベース編)

クラス PADO(概要)

クラス PADO は PowerCMS X のデータベース接続・データベース操作を担当するPHPのクラスです。

<?php
    require_once( 'class.PADO.php' );
    $db = new PADO();
    $objects = $db->model( 'entry' )->load();
    foreach ( $objects as $obj ) {
        echo $obj->title, '<br />';
    }
    $entry = $db->model( 'entry' )->new();
    $entry->title( 'PHP Alternative Database Object' );
    $entry->published_on( date( 'YmdHis' ) );
    $entry->save();

クラス「PADO」インスタンスの呼び出し

    $db = $app->db;
    // または
    $do = PADO::get_instance();

クラス「PADO」のメソッド


$db->init( $config );

設定を初期化してデータベースへの接続を行います。

パラメタ
  • array $config : クラス PADO にセットするプロパティの配列

$db->model( $model );

PADOBaseModel クラスのオブジェクトを生成して返します。

パラメタ
  • string $model : モデル名
戻り値
  • object $obj : PADOBaseModel クラスのオブジェクト

$db->load( $model, $terms[, $args, $cols, $extra ] );

※ PADOBaseModel クラスのloadメソッドを参照

$db->begin_work();

トランザクションを開始します。

$db->commit();

現在のトランザクションによるデータの変更処理をコミットします。

$db->rollback();

現在のトランザクションによるデータの変更処理をロールバックします。

$db->quote( $str );

入力文字列のまわりに引用符を付け(必要であれば)、 入力文字列にあるシングルクオートをエスケープします。

パラメタ
  • string $str : エスケープする文字列
戻り値
  • string $quoted : エスケープ済みの文字列

$db->escape_like( $str[, $start, $end ] );

LIKE句に渡す値をエスケープします。

パラメタ
  • string $str : エスケープする文字列
  • bool $start : 先頭に「%」を追加します
  • bool $send : 末尾に「%」を追加します
戻り値
  • string $quoted : エスケープ済みの文字列

$db->stash ( $name[, $value ] );

値を(メモリ上に)キャッシュするか、キャッシュ済みの値を返します。

パラメタ
  • string $name : キャッシュのキー
  • mixed $value : キャッシュする値
戻り値
  • mixed $value : 第2引数が省略された時、キャッシュされた値

$db->clear_cache( [ $model ] );

キャッシュを破棄します。

パラメタ
  • string $model : 対象のモデル(省略時はすべてのキャッシュをクリアします)

クラス PADOBaseModel(概要)

PADOBaseModel は ActiveRecordタイプのデータベース・レコードです。データベースのレコードはオブジェクト(PowerCMS X の MVCにおける Modelを担う PADOBaseModel、PADOBaseModel を継承した PADOMySQL)として扱われます。

<?php
    $do = PADO::get_instance();
    $entry = $db->model( 'entry' );
    $terms = ['title' => 'Hello', 'excerpt' => 'This is description of Hello.'];
    $args  = ['limit' => 10, 'offset' => 10, 'sort' => 'id', 'direction' => 'ascend'];

    // Load Objects.
    $entries = $entry->load( $terms, $args );
    foreach ( $entries as $entry ) {
        echo $obj->title, '<br />';
    }

    // Like Statement.
    $phrase = $db->escape_like( 'PADO' );
    $terms['text' => ['like' => $phrase] ];
    $entries = $entry->load( $terms );

    // Count Objects.
    $count = $entry->count( $terms );

    // New Object.
    $entry = $entry->new();
    $entry->title( 'New Entry' );
    $entry->set_values(
        ['text' => 'This is body of new Entry.',
         'published_on' => date( 'YmdHis' ) ]
    );
    $entry->save();

    // Delete Object.
    $entry = $entry->load( 1 );
    $entry->remove();

クラス「PADOBaseModel」のメソッド


$obj->new( [ $values ] );

新しいオブジェクトを生成します。

パラメタ
  • array $values : カラム名と値の配列
戻り値
  • object $obj : 新しく生成されたオブジェクト

$obj->load( [ $terms, $args, $cols, $extra ] );

SELECT文を発行してオブジェクトをロードします。

パラメタ
  • mixed $terms : 数値(ID) または、カラム名と値の配列
  • array $args : ソート順やlimit/offset等のオプションの配列
  • string $cols : SELECT対象のカラム(カンマ区切りの文字列)または'*'
  • string $extra : SELECT文の WHERE句に追加する SQL(インジェクション対策はコード中で行う必要があることに注意)
戻り値
  • mixed $objects(s) : 数値(ID)を渡した時は単一のオブジェクト、それ以外の時はオブジェクトの配列

$obj->load_iter( $terms, $args, $cols, $extra );

SELECT文を発行してオブジェクトをロードします。戻り値が PDOStatement である点を除けば loadメソッドとの違いはありません。

  • object $sth : PDOStatement オブジェクト

$obj->get_by_key( $params );

$params にマッチするオブジェクトが存在する場合はそのオブジェクト、存在しない場合は新規にオブジェクトを生成して値をセットします。

パラメタ
  • array $params : カラム名と値の配列
戻り値
  • object $obj : 条件にマッチした単一のオブジェクト、または存在しない時は新規に生成され $params の値がセットされた単一のオブジェクト

$obj->count( [ $terms ] );

条件にマッチするオブジェクトの数を返します

パラメタ
  • array $terms : カラム名と値の配列
戻り値
  • int $count : マッチしたオブジェクトの数

$obj->has_column( $name );

オブジェクトに指定した名前のカラムが存在するかどうかを返します。

パラメタ
  • string $name : カラム名
戻り値
  • bool $has_column : 指定した名前のカラムが存在するかどうか

$obj->count_group_by( $terms, $args );

指定したカラムのすべての値から重複を取り除いたリストを取得し、それぞれの値について、その値を持つオブジェクトの数をカウントして返します。

パラメタ
  • array $terms : 列名をキー、列の値を値とした配列(ハッシュ)
  • array $args : グループ化するカラムの配列

  • array $result : 該当する値とカウント数の配列

$obj->save();

オブジェクトを保存します(INSERTもしくはUPDATE文を発行します)。

戻り値
  • bool $success : SQLクエリが成功したかどうか

$obj->update();

saveメソッドのエイリアスです。

$obj->update_multi( $objects );

オブジェクトの配列から複数のオブジェクトを新規保存もしくは一括アップデートします。

パラメタ
  • array $objects : オブジェクトの配列
戻り値
  • bool $success : SQLクエリが成功したかどうか

$obj->remove();

オブジェクトを削除します(DELETE文を発行します)。

戻り値
  • bool $success : SQLクエリが成功したかどうか

$obj->delete();

removeメソッドのエイリアスです。

$obj->remove_multi( $objects );

オブジェクトの配列を渡して複数のオブジェクトを一括削除します。

パラメタ
  • array $objects : オブジェクトの配列
戻り値
  • bool $success : SQLクエリが成功したかどうか

$obj->column_values();

レコードの値の配列を返します。

$obj->set_values( $params );

レコードの値をセットします。

パラメタ
  • array $params : カラム名をキーに、セットする値を値にした配列

$obj->get_values();

オブジェクトのカラム名をキーにしたカラムと値の配列を返します。

戻り値
  • array $key_values : カラム名をキーにしたカラムと値の配列

$obj->validation( $values );

オブジェクトの値とカラム型を照合してバリデーションを行います。

パラメタ
  • array $values : カラム名をキーに、セットする値を値にした配列
戻り値
  • array $values : バリデーション済みの配列

$obj->date2db( $ts );

Ymd形式の数値を Y-m-d形式に変換します。

パラメタ
  • int $ts : 6桁の数値
戻り値
  • string $ts : Y-m-d形式の文字列

$obj->time2db( $ts );

His形式の数値を H:i:s形式に変換します。

パラメタ
  • int $ts : 6桁の数値
戻り値
  • string $ts : H:i:s形式の文字列

$obj->ts2db( $ts );

YmdHis形式の数値を Y-m-d H:i:s形式に変換します。

パラメタ
  • int $ts : 12桁の数値
戻り値
  • string $ts : Y-m-d H:i:s形式の文字列

$obj->db2ts( $ts );

Y-m-d H:i:s形式の文字列を YmdHis形式に変換します。

パラメタ
  • string $ts : Y-m-d H:i:s形式の文字列
戻り値
  • int $ts : 12桁の数値