« Perl で並列処理 (using マルチプロセス) | メイン | MySQL のウォームアップ (InnoDB編) »

2007年10月04日

DBIx::Printf と LIKE 式

Kazuho Oku / DBIx-Printf-0.05 - search.cpan.org
(svn リポジトリ)

 本社の山本さんに「DBIx::Printf では LIKE 式の扱いも考えるべき」と言われたので、こんな感じで対応してみました。

my $prefix = "abc";

my $sql = $dbh->printf(
    'select * from t where name like %like(%s%%)',
    $prefix,
);

print "$sql\n"; # 出力: select * from t where name like 'abc%'

 %like(fmt) の中に渡される引数においては、% や _ もエスケープするようにしました。これで、いちいち別のエスケープルーチンを呼ばなくても、ユーザーが入力した値が % で始まっている場合に全サーチが始まってシステムが重くなる、といった事態が起きないようになります。

 やややりすぎ感がありますが、こういう面倒も見てくれるといいよね、ということで。

注: まだ not found かも

投稿者 kazuho : 2007年10月04日 14:16 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/1572