DBIx::Customで where を設定する時の注意点
- 2011.07.30
- perlモジュール
- DBIx::Custom, perl
DBIx::Custom - search.cpan.org
DBIx-Custom-0.1705
DBIx::Custom select メソッドの whereの項目を見ると様々な指定方法が出来ることが分かる。
注意する点はStringを渡す時。
where => "url = 'http://hoge.com/huga.cgi?key=value' ",
上のように条件に ? が含まれる場合、SQLの作成に失敗する。(DBIx::Custom::QueryBuilder::build_queryでかな?)
? がメタ文字として扱われるため?(\?とエスケープしてもダメ)
Hashリファレンスで渡すと大丈夫です。
where => {url => 'http://hoge.com/huga.cgi?key=value' },
これを踏まえてコードにすると、安全なのはこんな感じのコードになるのかな。
my $id = 1;
my $url = 'http://hoge.com/huga.cgi?key=value';
$result = $dbi->select(
table => 'table_name',
column => [qw/title content url/],
where => [
["and", "{= id}", "url = :url", "update_time > SUBDATE( NOW(), interval 7 day )"],
{ id => $id, url => $url},
],
);
※ {= id} は "id = :id" とも書ける(url = :urlも同様)。あえて両方含めてみた。
where にはDBIx::Custom::Whereオブジェクトも指定できますが、DBIx::Custom::Whereオブジェクトを生成する時にも同様で、? を含めた条件には注意が必要。
追記:タグ機能は廃止予定だそうです。
http://twitter.com/#!/perlcodesample/status/97162783644319744
-
前の記事
perlモジュールのバージョンを調べる便利なコマンド pmvers 2011.07.29
-
次の記事
JavaScriptの document.getElementById() でnullが帰る対処 2011.08.24