溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Yii框架參數(shù)化查詢中IN查詢只能查詢一個怎么辦

發(fā)布時間:2021-07-13 15:23:19 來源:億速云 閱讀:198 作者:小新 欄目:開發(fā)技術

這篇文章給大家分享的是有關Yii框架參數(shù)化查詢中IN查詢只能查詢一個怎么辦的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

具體如下:

在yii框架中使用參數(shù)化進行IN查詢時,結果不如所愿

$sql =<<<SQL
SELECT id FROM tb WHERE id IN(:ids)
SQL;
$db = GeneralService::getSlaveDB();
$result = $db->createCommand($sql)->query([':ids' => '1013,1015,1017'])->readAll();
print_r($result);
Array
(
  [0] => Array
    (
      [id] => 1013
    )
)

于是翻了yii框架中相關源碼,發(fā)現(xiàn)采用的是pdo查詢,于是又查詢了pdo相關資料,知道了原因:不能讓占位符代替一組值

SELECT id FROM tb WHERE userid IN ( ? );

既然知道了原因,那么就找到替代的方法,F(xiàn)IND_IN_SET正好可以滿足

$sql =<<<SQL
SELECT id FROM tb WHERE FIND_IN_SET(id, :ids)
SQL;
$db = GeneralService::getSlaveDB();
$result = $db->createCommand($sql)->query([':ids' => '1013,1015,1017'])->readAll();
print_r($result);
Array
(
  [0] => Array
    (
      [id] => 1013
    )
  [1] => Array
    (
      [id] => 1015
    )
  [2] => Array
    (
      [id] => 1017
    )
)

簡單科普下FIND_IN_SET函數(shù)

FIND_IN_SET(str,strlist)

假如字符串str在由N子鏈組成的字符串列表strlist中,則返回值的范圍在 1 到 N 之間。

一個字符串列表就是一個由一些被 ‘,' 符號分開的子鏈組成的字符串。如果第一個參數(shù)是一個常數(shù)字符串,而第二個是type SET列,則   FIND_IN_SET() 函數(shù)被優(yōu)化,使用比特計算。

如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個參數(shù)為NULL,則返回值為 NULL。這個函數(shù)在第一個參數(shù)包含一個逗號(‘,')時將無法正常運行。

感謝各位的閱讀!關于“Yii框架參數(shù)化查詢中IN查詢只能查詢一個怎么辦”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI