« Perl で並列処理 (using マルチプロセス) | メイン | MySQL のウォームアップ (InnoDB編) »
2007年10月04日
DBIx::Printf と LIKE 式
本社の山本さんに「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