2017-01-16 185 views
2

我儘量限制在Yii2搜索結果使用查詢類和WHERE條件正確使用凡在查詢中YII2

$command=(new Query())   
     ->select('*') 
     ->from('ct_ostatniNaklady') 
     ->where('pid=:pid',[':pid' => 1]) 
     ->createCommand()->sql; 

     var_dump($command);die; 

然而,當命令無法正常工作。我得到這個結果時,我傾倒$命令:

string(48) "SELECT * FROM `ct_ostatniNaklady` WHERE pid=:pid" 

我不`噸知道爲什麼:PID串不受1.

更換使用diffent語法沒有任何影響

->where(['pid'=>'1']) 

結果是很常見的:

string(50) "SELECT * FROM `ct_ostatniNaklady` WHERE `pid`=:qp0" 

什麼是正確的方法如何使用條件?

+0

它是一個佔位符,您正在傾銷準備好的聲明。它將在執行查詢時被替換。 – fpietka

回答

2

這是絕對正常的,這就是PDO的工作原理。並且你在適當的地方使用。

如果你想生成綁定到一個變量值使用的每個參數的SQL查詢:

...->createCommand()->rawSql; 

PS。我希望你只用於調試和一些特殊情況,因爲通常不需要生成這樣的原始查詢。

+0

我將它用作SqlDataProvider的輸入 –

+0

@ user1041880爲什麼不使用'ActiveRecord'和'ActiveDataProvider'來替代,或者只是自己創建SQL字符串。否則,使用'yii \ db \ Query'是過量的。 – marche