忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/22 18:30 |
AuraPHP 1.0.0 Aura.Sql
Aura.Sqlを使ってSQLを発行してみます。
中身は単に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


2013/05/06 21:44 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<AuraPHP 1.0.0 Aura.Sql その2 | HOME | 買ったものリスト 2013/05/05>>
忍者ブログ[PR]