26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLビルダ「FluentPDO」を試してみた

Posted at

PHPのSQLビルダライブラリFluentPDOを試してみた。

試してみようと思った動機

いままで文字列操作でSQLを組み立ててたけど、
検索条件によってSQLを組み立てるときにスペースやコンマが抜けててシンタックスエラーになったり、

$sql = 'select * from foo';
if ($condition) {
    $sql = 'where column = ?';
	// whereの前にスペースがなくてエラー!
}

IN句の組み立てがつらかったりした。

$values = ['val1', 'val2', 'val3'];
$sql = 'select * from foo where column in (' . implode(',', array_fill(0, count($values), '?')) . ')';
// つらい!

世の中にはSQLビルダとかいう便利なものがあるらしいので、調べてみた。

SQLビルダに求めるもの

  • シンプルなシンタックス
  • DBアクセスは外部から設定できること

いろいろ見た結果FluentPDOが要件を満たしていた。

使い方

公式ドキュメントに詳しく書かれているのでそちらを見るのが早いけど、こんな感じで使える。

$pdo = new PDO("mysql:dbname=fblog", "root", "password");
$fpdo = new FluentPDO($pdo);

$query = $fpdo->from('article')
              ->where('published_at > ?', $date)
              ->orderBy('published_at DESC')
              ->limit(5);
if ($user_id) {
    $query = $query->where('user_id', $user_id);
}
foreach ($query as $row) {
    echo "$row[title]\n";
}

FluentPDOのいいところ

  • DBアクセスをPDOに任せている
    • ライブラリ自体はSQLの組み立てに専念しているため、シンプルな構成になっている
  • 呼び出し側のコードがシンプル

FluentPDOのよくないところ

PHP 5.1から対応してるので、コードベースが古い。
なのでforkしていじってみた。

  • PSR準拠
  • namespace化、autoload対応
  • short array syntax使用

まとめ

やり過ぎない感じで良いライブラリだと感じた。
今度実戦投入してみようと思う。

26
25
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?