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”が返却されます。
データベースタイプ別の処理を行う必要がある場合に、使用します。