2

私はそれ:parent_idが数に評価されると思います。しかし、このコードはどのように正確に機能しますか?この構文(:name)はいつ使用する必要がありますか?

$data = Location::model()->findAll('parent_id=:parent_id',array(
                ':parent_id' => (int) $_POST['Current-Controller']['country_id']
        ));
4

1 に答える 1

8

コロンには特別な意味はありません。パターン: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結果として、すべてのレコードに一致する条件が発生します。

于 2012-06-02T18:48:37.507 に答える