Aura SQL
Aura SQLパッケージはMySQL、PostgreSQL、それにSqliteなどのデータベースのクエリーとその接続を提供します。
接続のほとんどはPDO接続でラップされたものです。
Aura SQL は4つの接続アダプターをサポートします。'mysql'
はMySQL、 'pgsql'
はPostgreSQL、
'sqlite'
はSQLite3それに'sqlsrv'
は Microsoft SQL Serverに使われます。
インストール
もしAura.SqlをDIで使うならこの章はスキップできます。
scripts/instance.php
スクリプトを使いConnectionFactory
を取得して接続するのが始めるのに簡単な方法です。
代わりに、別のautoloaderに'/path/to/Aura.Sql/src'
を加えて手動で接続を取得する事もできます。
接続
接続はクエリーを発行したときに遅延接続されます。つまり接続オブジェクトを作成しても、もしクエリーを発行しなければデータベースに接続される事はありません。
手動でconnect()
を使って接続する事もできます。
結果の取得
一度接続すれば、データベースから結果を取得することもできます。
これらのメソッドを使って結果を取得することができます。
fetchAll()
は全ての行の連続した配列を返します。行は列の名前をキーとした連想配列が返ります。
returns a sequential array of all rows. The rows themselves are
associative arrays where the keys are the column names.
-
fetchAssoc()
は最初の列がキーとなった全ての行の連想配列が返ります。
-
fetchCol()
は最初の列の全ての値を連続した配列として返します。
-
fetchOne()
は最初の行を列名をキーとした連想配列で返します。
-
fetchPairs()
は最初の列をキーとして次の列を値とした連想配列を返します。
-
fetchValue()
最初の列の最初の行の値を返します。
SQLインジェクションの防御
通常、ユーザーが提供するデータをクエリーに組み入れる必要があります。
つまり、全ての値をクオートしてクエリー文字列に差し込むSQL injectionの防止をしなければなりません。
Aura SQLはクオートするメソッドを提供していますが、それよりプリペアードステートを使って値をバインドする方が良いでしょう。
その為にクエリーの文字列中に名前を使ったプレースホルダーを置いて、そのプレースホルダーに配列の値をバインドします。
Aura SQL は配列とクオートする値をカンマ区切りのリストとして、認識します。
クエリーオブジェクト
Aura SQLは4つのタイプのクエリーオブジェクトを用意します。
それによってオブジェクト指向スタイルで記述することができます。
Select
新しいSelect
オブジェクトを取得するのにはnewSelect()
メソッドを接続の時に実行します。
それからSelect
オブジェクトを変更して、query()
やfetch*()
メソッドに渡します。
Select
オブジェクトはこれらのメソッド以上のものを提供します。
更なる情報はソースコードをご覧になってください。
-
distinct()
: SELECT DISTINCT
にtrue
をセットします。
-
cols()
: コラム(列)をセレクトします。
-
from()
: テーブルをセレクトします。
-
join()
: 特定条件のテーブルをジョインします。
-
where()
: 条件にWHERE
を使います。(AND
を使用します)
-
orWhere()
: 条件にWHERE
を使います。(OR
を使用します)
-
groupBy()
: コラム(列)をGROUP BY
します。
-
having()
: 条件にHAVING
を使います。 (AND
を使用します)
-
orHaving()
: 条件にHAVING
を使います。 (OR
を使用します)
-
orderBy()
: コラム(列)をORDER BY
します。
-
limit()
: ロー(行)に対してLIMIT
します。
-
offset()
: ロー(行)に対してOFFSET
します。
-
union()
: SELECT
にUNION
を続けます。
-
unionAll()
: SELECT
にUNION ALL
を続けます。
Insert
新しいInsert
オブジェクトを取得するのにはnewInsert()
メソッドを接続の時に実行します。
それからInsert
オブジェクトを変更して、query()
メソッドに渡します。
Update
新しいUpdate
オブジェクトを取得するのにはnewUpdate()
メソッドを接続の時に実行します。
それからUpdate
オブジェクトを変更して、query()
メソッドに渡します。
Delete
新しいDelete
オブジェクトを取得するのにはnewDelete()
メソッドを接続の時に実行します。
それからDelete
オブジェクトを変更して、query()
メソッドに渡します。
テーブル情報の取得
データベースのテーブル情報を取得するにはfetchTableList()
を発行します:
テーブルのカラムについての情報を取得するにはfetchTableCols()
を発行します;
それぞれのコラムは以下のプロパティを持つColumn
オブジェクトとして表されます。
-
name
: (string) コラム名
-
type
: (string) データベースにより伝えられるコラムのデータの型。
-
size
: (int) コラムサイズ
-
scale
: (int) (もしあれば)コラムの数
-
notnull
: (bool) NOT NULL
とマークされてるコラムの数
-
default
: (mixed) コラムのデフォルト値。timestamp
が自動でセットされる場合はnull
の時があることに注意。
-
autoinc
: (bool) auto-incremented
のコラムかどうか
-
primary
: (bool) プライマリーキーかどうか
トランザクション
Aura SQL接続はいつもautocommitモードで始まります(PDOと同じです)
これをオフにしてトランザクションはbeginTransaction()
で開始してcommit()
または rollBack()
することができます。
コミットとロールバックは接続をautocommitモードに戻します。
マニュアルクエリー
手動でのクエリーも可能です。query()
メソッドでこのようにします;
返される$stmt
はPDOStatementで自由に操作できます。
プロファイリング
クエリーがどのように実行されているかプロファイルする事もできます。
プロファイルオブジェクトはそれぞれ以下のプロパティを持ちます。 operties:
-
text
: (string) クエリー文字列
-
time
: (float) クエリーが完了するまでの時間。単位は秒。
-
data
: (array) クエリーにバインドされたデータ。
-
trace
: (array) クエリーがどうやって呼ばれたかを知る事のできるdebug_backtrace