【CakePHP】比較演算子インジェクションを気にせずに済む、findAllByやfindByでorderやlimitを指定する
激しく便利だったので、久しぶりにCakePHPネタを更新です。
CakePHPのfindやfindAllには、Shin x blogさんのCakePHP 比較演算子インジェクションに注意やCakePHPガイドブックで言及されているとおり、条件を連想配列で渡す場合、比較演算子インジェクションに注意しなければいけません。
それに対して、findByやfindByAllには、その対策がとられています。
ただし、 APIをみても
$this->モデル名->findAllbyカラム名(検索条件);
検索条件を指定するという書き方しか載っていません。
ところが、
blog.hereticsintheworldさんの[cakephp]findAllByでorderしたいによると、findByやfindByAllでも、findやfindAllと同様な指定が出来るそうです。
$this->モデル名->findAllbyカラム名(検索条件,取得カラム,取得順,件数,ページ数,階層);
例えばUser_idが”1”のユーザの最新の投稿5件というのは、こんな感じで書けます
$post=$this->Post->findAllbyUserId(1,null,'Post.created DESC',5);
findByのカラムの複数指定(findByカラム1Andカラム2など)と組み合わせると、findをつかうケースはほとんどなさそうです。
比較演算子インジェクションとは、”さよなら”です。
追記: 取得順(order by)を指定する際に'Post.created DESC'のようにモデル名.カラム名で指定しないとうまくいきませんでした(CakePHP Ver1.1)。
Popularity: 39 %
by redgasuki 











コメントはまだありません。