2014年9月9日火曜日

Tengなどのsingleメソッドで気をつけること


このエントリーをはてなブックマークに追加
意図しないレコードを取得する危険性があるのでバリデーションしましょうという話。

Tengの場合

Tengの場合、デフォルトではSQL::Makerを使用しますが、
以下の$whereが空ハッシュ{} の場合
$db->single( member => $where );
DBIx::QueryLogで確認すると、
SELECT (略) FROM `member` LIMIT 1
となります。 Amon2を使ってる場合、MyApp::DBにsingleメソッドを作ってそこでバリデーションしています。

MongoDB

MongoDBのfind_oneメソッドもこれと似た挙動をするはずなので注意。
というか元々は1年ほど前にMongoDBでビックリして以来、他でも気を付けていたらTengで見つけたのでした。

一つじゃなくてユニークが欲しい

自分がsingleを使うときは複数あるものから1件だけ欲しいのではなく、ユニークなレコードを取得したいときなので、 singleじゃない、ボッチメソッドがあるといいな

0 件のコメント:

コメントを投稿