私はそれ:parent_id
が数に評価されると思います。しかし、このコードはどのように正確に機能しますか?この構文(:name
)はいつ使用する必要がありますか?
$data = Location::model()->findAll('parent_id=:parent_id',array(
':parent_id' => (int) $_POST['Current-Controller']['country_id']
));
コロンには特別な意味はありません。パターン:parent_id
は全体としてはそうですが、それはWHERE
条件(parent_id=:parent_id
)で変数名として使用することを選択したためです。
あなたも同様に書くことを選んだかもしれません
$data=Location::model()->findAll('parent_id=the_quick_brown_fox',
array('the_quick_brown_fox'=>(int) $_POST['Current-Controller']['country_id']));
実際には、変数に選択した名前が条件の正当な部分としても存在するリスクがあるため、コロンが使用されます。この場合、そのすべてのインスタンスが値に置き換えられ、結果は予期しないものになります。
たとえば、これは次のとおりです。
$data=Location::model()->findAll('parent_id=parent_id',
array('parent_id'=> 1 /*anything, really*/));
1=1
結果として、すべてのレコードに一致する条件が発生します。