2017-01-16 40 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