2017-01-16 6 views
2

でクエリで私はQueryクラスを使用してYii2で検索結果を制限しようとするところの使用条件正しい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" 

である理由を、私は知っている `tを:pidの文字列がdiffent構文を使用して1

で交換しないと、何の効果

->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