數據庫------SQL語句單雙引號(2)+yii2

1.where($condition,$params=[ ])

2.最近使用where()時候發現了一個錯誤,搞得我很莫名其妙。

   我甚至一度懷疑數據庫系統出了問題,經過一番檢查果然還是自己語法寫錯了,記下來,分享給大家。

<?php 
 $query1=FriendList::find()->where(['and','user_id'=>6,'friend_id'=>7]); //錯誤
 $query2=FriendList::find()->where(['and','user_id=6','friend_id=7']);  //正確
?>

 第一句,是我寫的,目的就是查user_id=6和friend_id=7 的這條數據,結果給我返回的是全部數據,而且也沒有語法報錯

最後通過打出原生sql語句,以及查教程,發現第一句是錯誤的寫法,第二句纔是正確的。

下面給出原生sql語句:(可以發現,第一句原生sql語句where條件已經起不到作用了,所以返回了所有數據)

如果非要使用第一種寫法的話,可以把‘and’去掉,默認多個條件並列就是‘and’: 

<?php 
$query1=FriendList::find()->where(['user_id'=>6,'friend_id'=>7]); //正確

//還可以這樣寫
$query1=FriendList::find()->where(['and',['user_id'=>6],['friend_id'=>7]]); //正確
?>

如果有條件中有變量的話,一般用數據綁定的方法書寫。( 4.6魏曦教你學yii2)

<?php$query=FriendList::find()
->where(['or','user_id=:user_id','friend_id=:friend_id'])                                  
->addParams([':user_id'=>Yii::$app->user->identity->id,                                              
             ':friend_id'=>Yii::$app->user->identity>id]);

/*直接都在where語句裏綁定也行
where(['or','user_id=:user_id','friend_id=:friend_id'],
      [':user_id'=>Yii::$app->user->identity->id,                                              
       ':friend_id'=>Yii::$app->user->identity>id])
*/
var_dump($query->createCommand()->getRawSql());
exit(0);
?>

 

 

3.在AR查詢查詢構建器查詢中,列名、表名、連接詞 可以用雙引號或者單引號,一般都用  單引號,什麼都不用會報錯。

<?php 
$query1=FriendList::find()->where(['user_id'=>6]);   //單引號
$query2=FriendList::find()->where(["user_id"=>6]);  //雙引號
echo "<pre>";

echo '$query1的原生sql語句:';
var_dump($query1->createCommand()->getRawSql());

echo '$query2的原生sql語句:';
var_dump($query1->createCommand()->getRawSql());

exit(0);
?>

結果:(使用單雙引號,結果都是被轉成了一樣的原生sql語句,不寫的話會報錯)

 

3.where()養成習慣,把條件語句用數組符號[  ]框起來。

例1:

<?php 
$query1=FriendList::find()->where('user_id'=>6); //會報錯,不符合語法  
?>

這種寫法 

  

4.查詢構建器

<?php
$query=(new \yii\db\query)
->select('id,name')   
->from('post');
//->select('id','name')只會查詢前一個,後面那個會被忽略
//->select(['id','name']) 的寫法也是正確的
?>

 

補充知識點:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章