Aura.Sqlを使ってSQLを発行してみます。
中身は単にPDOのラッパで、さほど難しく考えずに使用可能です。
マニュアルだとinstance.phpをインクルードしろとなっているのですが、困ったことにinclude.phpにはオートロードが効きません。
中身はConnectionFactoryをnewしてるだけなので普通にやったほうがいい気がします。
DSNの形式はPDOとほぼ同じですが、頭の'mysql'や'pgsql'だけ分けないといけないようです。
使い方としてはぺちぱーお馴染み配列形式の他、クエリオブジェクトによるメソッドチェインでの記述も可能になっています。
ただこのクエリオブジェクト、微妙に使いにくいです。
せっかくメソッドチェイン使ってるのだから、$connection->newInsert()->into('hoge')->col('data', 'でーた')->exec()みたいに使いたかったところ。
マニュアルでは$insert->set('date', 'NOW()')という例がありますが、これは見てのとおりSQLを直接入れたい場合に使います。
うっかり$insert->set('data', $_REQUEST['data'])とするとSQLインジェクションになるので注意しましょう。
Aura.Sqlを使った場合、SQLとしての利点は正直メソッドチェインくらいですが、プロファイラが簡単に使えてボトルネック分析などが非常に楽なのが便利です。
getProfiler()でプロファイラを取得し、発行したSQL、かかった時間などの詳細を確認することができます。
AuraPHPの記事
中身は単にPDOのラッパで、さほど難しく考えずに使用可能です。
<?php
require_once('path/to/channel/vendor/autoload.php');
// Aura.Sql
$auraSql = new Aura\Sql\ConnectionFactory();
$connection = $auraSql->newInstance('mysql', 'host=localhost;dbname=test;charset=utf8;', 'testuser', 'testpass');
// プロファイラを有効にする
$connection->getProfiler()->setActive(true);
// トランザクション開始
$connection->beginTransaction();
try{
// SELECT / SQL
$select = 'SELECT * FROM hoge WHERE id = :id';
$where = array('id'=>1);
$connection->fetchAll($select, $where);
// SELECT / クエリオブジェクト
$select = $connection->newSelect();
$select->cols(['*'])->from('hoge')->where('id = :id');
$where = array('id'=>1);
$connection->fetchAll($select, $where);
// INSERT / 配列
$table = 'hoge';
$bind = array('data'=>'でーた');
$connection->insert($table, $bind);
// INSERT / クエリオブジェクト
$insert = $connection->newInsert();
$insert->into('hoge')->cols(array('data'));
$bind = array('data'=>'でーた');
$connection->query($insert, $bind);
// LAST_INSERT_ID
$lastInsertId = $connection->lastInsertId();
// UPDATE / 配列
$table = 'hoge';
$where = 'id = :id';
$bind = array('id'=>1);
$update = array('data'=>'でーた1');
$connection->update($table, $update, $where, $bind);
// UPDATE / クエリオブジェクト
$update = $connection->newUpdate();
$update->table('hoge')->where('id = :id')->cols(array('data'));
$bind = array('id'=>2, 'data'=>'でーた2');
$connection->query($update, $bind);
// DELETE / 配列
$table = 'hoge';
$where = 'id = :id';
$bind = array('id'=>1);
$ret = $connection->delete($table, $where, $bind);
// DELETE / クエリオブジェクト
$delete = $connection->newDelete();
$delete->from('hoge')->where('id = :id');
$bind = array('id'=>2);
$connection->query($delete, $bind);
// コミット
$connection->commit();
}catch(Exception $e){
// ロールバック
$connection->rollBack();
}
// プロファイラを止める
$connection->getProfiler()->setActive(false);
// プロファイラを取得
$profile = $connection->getProfiler()->getProfiles();
マニュアルだとinstance.phpをインクルードしろとなっているのですが、困ったことにinclude.phpにはオートロードが効きません。
中身はConnectionFactoryをnewしてるだけなので普通にやったほうがいい気がします。
DSNの形式はPDOとほぼ同じですが、頭の'mysql'や'pgsql'だけ分けないといけないようです。
使い方としてはぺちぱーお馴染み配列形式の他、クエリオブジェクトによるメソッドチェインでの記述も可能になっています。
ただこのクエリオブジェクト、微妙に使いにくいです。
せっかくメソッドチェイン使ってるのだから、$connection->newInsert()->into('hoge')->col('data', 'でーた')->exec()みたいに使いたかったところ。
マニュアルでは$insert->set('date', 'NOW()')という例がありますが、これは見てのとおりSQLを直接入れたい場合に使います。
うっかり$insert->set('data', $_REQUEST['data'])とするとSQLインジェクションになるので注意しましょう。
Aura.Sqlを使った場合、SQLとしての利点は正直メソッドチェインくらいですが、プロファイラが簡単に使えてボトルネック分析などが非常に楽なのが便利です。
getProfiler()でプロファイラを取得し、発行したSQL、かかった時間などの詳細を確認することができます。
AuraPHPの記事
PR