忍者ブログ
ブログツール、2007/11/06作成
[20] [19] [18] [17] [16] [15] [14] [13] [12] [11] [10
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Railsを使ってると、フリーワード検索はやりにくかったりする。
特に、オブジェクトの関連が絡んでくるとかなり面倒。

で、結局find_by_sqlを使うことになるんだけど、そうなるとパラメータをサニタイジングしないと危なくて使えない。

普通にfindのconditionsオプションでやるときはフレームワークがやってくれるので幸せだが、find_by_sqlだと出来ない。

しょうがないので、たぶんあるだろうとquote()でやってみるも「見つからん」とのことで、APIを読んでみるといろんなところで同一のメソッドが定義されているので、どのクラスのquote()を使うか指定しないといかん。

無難そうなActiveRecord::Baseを使ってみる。
この場合、引き渡されたパラメータをシングルクオートで囲ってくれる。

LIKEで部分一致もしくは、前方、後方一致で検索したいときはこれが引っかかる。
SQLエラーが出ちゃうのだ。

シングルクオートで囲んでほしくないときは、Mysql::quote()を使うのが吉。
DBMSをMySQL以外の時はどうなるんだろ。
ま、ほかを使う気が全くないのでいいけど。

結論

Mysql::quote()を使え。

あらかじめシングルクオートで囲むのがいやならActiveRecord::Base::quote()
PR
この記事にコメントする
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret (チェックを入れると管理人だけに表示できます)
この記事へのトラックバック
この記事にトラックバックする:
ついめ~じ
ブログ内検索
フリーエリア
サニーカメラ
Powered by Ninja Blog    template by Temp* factory    icon by MiniaureType

忍者ブログ [PR]