[PX通信]データベースオブジェクト

PX通信(わら、小堤です。
社員にxFrameworkPX 3.0の新機能の説明などをどう伝えようか考えてて、めんどくさくなって結局ブログに書いてURL送ることにしました。ってことで、まぁ公開ネタです。
ちなみにxFrameworkPX3.0は9月頃に正式リリース予定。α、βに関してはその前ってことで。現在α→β中。まだ非公開。

 

 

データベースオブジェクトの機能と使い方

データベースオブジェクトは、アクションクラスでデータベースに対するアクセス制御を行います。
コネクションの設定は、_configs/database.xmlで行い、複数のコネクションを設定できます。

利用するコネクションを特に指定しない場合は、デフォルトコネクションとして、database.xmlで記述されている一番最初のコネクションを利用します。

コネクションを切り替える場合は、「setConnectionNameメソッド」を利用してください。

$this->D->setConnectionName( ‘切り替えたいコネクション名’ );

データベースオブジェクトは、設定されているコネクションを使用して操作を行います。

SQL文の作成

可読性を高めるため、SQLの記述方法を提示します。
SQL文は配列として作成しデータベースオブジェクトの正規化処理により作成します。

例:

$arrSQL = array();
$arrSQL[] = ‘SELECT’;
$arrSQL[] = ‘    COUNT(*) AS cnt’;
$arrSQL[] = ‘FROM’;
$arrSQL[] = ‘    tbl_user’;
$arrSQL[] = ‘WHERE’;
$arrSQL[] = ‘    tbl_user.id = :in_id’;
$arrSQL[] = ‘AND’;
$arrSQL[] = ‘    tbl_user.password = :in_password’;
 
$strSQL = $this->D->normalize( $arrSQL );

normalizeメソッドを使用することで、配列に記述されているSQLに改行コード(PHP_EOL定数)を付加し、文字列として取得することができます。

 

SQL文の確認

プログラミングを行っている際に、SQL文を確認したいシーンがあると思います。
また、PHPにより作成された動的なSQL等は、エラーが発生した際に、DBに対して実際にクエリーを別なコンソールなどで実行してみたい場面もあります。

そのような時には、dumpメソッドを使用することでSQLを確認できます。

例:

$arrSQL = array();
$arrSQL[] = ‘SELECT’;
$arrSQL[] = ‘    COUNT(*) AS cnt’;
$arrSQL[] = ‘FROM’;
$arrSQL[] = ‘    tbl_user’;
$arrSQL[] = ‘WHERE’;
$arrSQL[] = ‘    tbl_user.id = :in_id’;
$arrSQL[] = ‘AND’;
$arrSQL[] = ‘    tbl_user.password = :in_password’;
 
$strSQL = $this->D->normalize( $arrSQL );
 
$this->D->dump(
    $this->D->normalize( $arrSQL )
);

前提としてPDO経由で接続しているため、プリペアードステートメントからパラメータのバインドで使用する文字列がそのまま表示されます。(上記の例では、:in_idと:in_password)

しかし、ダンプされたSQLをコピー&ペースとして実行する際に、値を自身で置換する作業はフィールド数が増えるほど負担です。
そこで、dumpメソッドの第二引数に配列でバインド値を指定することで、バインド処理をエミューレートします。

基本的に全てのバインド値に対して、クォートが付加されます、数値は付加されません。
第三引数に、falseを指定することで、文字列のバインド値に対してもクォートが付加されなくなります。

例:

$arrSQL = array();
$arrSQL[] = ‘SELECT’;
$arrSQL[] = ‘    COUNT(*) AS cnt’;
$arrSQL[] = ‘FROM’;
$arrSQL[] = ‘    tbl_user’;
$arrSQL[] = ‘WHERE’;
$arrSQL[] = ‘    tbl_user.id = :in_id’;
$arrSQL[] = ‘AND’;
$arrSQL[] = ‘    tbl_user.password = :in_password’;
 
$strSQL = $this->D->normalize( $arrSQL );
 
$this->D->dump(
    $this->D->normalize( $arrSQL ),
    array(
        ‘:in_id’ => $strId,
        ‘:in_password’ => $strPassword
    )
);

 

SQLを実行する(execメソッド)

例:

$this->D->exec( $this->D->normalize( $arrSQL ) );

 

SQLを実行する(executeメソッド)

$this->D->execute(
    $this->D->normalize( $arrSQL ),
    array(
        ‘:in_id’ => $strId
    )
);

第二引数に配列として、バインドする配列を指定することで、パラメータをバインドできます。

 

単行を取得する(getRow)

例:

$this->D->getRow(
    $this->D->normalize( $arrSQL ),
    array(
        ‘:in_id’ => $strId
    )
);

 

全行を取得する(getRowAll)

例:

$this->D->getRowAll(
    $this->D->normalize( $arrSQL ),
    array(
        ‘:in_id’ => $strId
    )
);

 

トランザクションを開始する

例:

$this->D->beginTransaction();

 

ロールバックする

例:

$this->D->rollback();

 

コミットする

例:

$this->D->commit();

 

使用しているPDOドライバを調べる

例:

$this->D->getDriverType();

【MySQL使用時】
“mysql”が返却されます。

データベースタイプ別の処理を行う必要がある場合に、使用します。

 

[PX通信]データベースオブジェクト

コメントを残す