2011年5月11日水曜日

軽量のPHPの用ORマッパーがほしい

久しぶりにPHP + MySQLなWebアプリを1から構築することになった。機能が少ないのでフレームワークもオブジェクト指向も使わないのだが、MySQLとの接続部分は悩みの種だった。

今まではPHPで生成したSQL文をMySQL関数で実行していたのだが、一度DoctrineレベルのORマッパーの便利さを知ってしまうと、いちいち「select なんとか」とか「whereなんとか」とか書いているのがバカらしくなってしまう。しかし、PDOの抽象化は中途半端なので結局はSQLを書かなければならないし、Symfonyも使っていないのにDoctrineを使うのも大げさだ。そこで、関数ベースで簡単な抽象化を実現するコード(ライブラリ)を書いてみた。

実行したいSQL文に数値型と文字型のフィールドが混じっていると、文字型はシングルクォートで囲まなければならないために、SQL文の生成処理が煩雑になる。このライブラリでは予め「数値用のフィールド」と「文字用のフィールド」を別々の配列に格納して引き渡すことで、呼び出し側をすっきりさせてみた。

また、関数の名前を「_db_」と汎用的な名前にしたので、呼び出し元の変更なしに他のデータベースへ切り替えることができるだろう。

最初は「select用のSQLが簡単に生成できればいいや」と思っており、こんなに機能を盛り込むつもりはなかったのだが、作ってから「やっぱりオブジェクト指向で作成すればよかった」と、ちょっと後悔。やっぱりDoctrineにすればよかったかな?

0 件のコメント:

コメントを投稿