2012-06-02 40 views
2

我假設:parent_id評估爲一個數字。但是,這段代碼究竟是如何工作的?什麼時候應該使用這種語法(:name)?引號內的變量名前的冒號(:)如何工作?

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

回答

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,這將匹配所有記錄。

+0

我不確定我關注。它只是一個字符串?如果parent_id是2,那麼:parent_id在引號內評估爲2?它不會出現在html的內部。我看到了另一個例子,例如$ length被傳入一個函數,然後作者使用:函數內的長度。 – nimble

+0

@ user1417526:否,在之後執行替換(正在處理數據庫查詢時)。 – Jon

+0

謝謝你的幫助。非常感謝! – nimble