第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用Yii@1.1通過 WHERE IN 子句獲取AllBySql ?

如何使用Yii@1.1通過 WHERE IN 子句獲取AllBySql ?

PHP
慕桂英546537 2023-10-01 17:22:59
遺留項目使用yii@1.1 。我想在CActiveRecord.原始 sql 中的查詢將是:SELECT columnFROM tableWHERE some_id in (1, 32, 10)當我直接查詢數(shù)據(jù)庫時它工作得很好。我得到了所有結果。我class MyActiveRecord extends CActiveRecord通過 yii 中的以下方法將其映射到我的活動記錄 ( ) 中:    public function getColumn(array $someIds): array    {        $idList = rtrim(implode(', ', $someIds), ', ');        $sql    = "SELECT column FROM table WHERE some_id IN (:idList)";        $results = parent::model(__CLASS__)->findAllBySql(            $sql,            ['idList' => $idList]        );        return array_column($results, 'column');    }該代碼有效,但奇怪的是它只獲取第一個的結果some_id。我如何獲取所有這些?假設對于我的 id 1,我有 5 個結果,對于 32,我有 3 個結果,對于 10,我有 2 個結果,我預計總共有 10 條記錄。然而我只得到 yii 中 id 1 的 5 個結果。我究竟做錯了什么?(當我更改 id 的順序時,始終只會獲取第一個 id,而忽略其他 id。)
查看完整描述

2 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

您的代碼將創(chuàng)建類似的查詢SELECT column FROM table WHERE some_id IN ('1, 32, 10')- 您使用一個參數(shù)并將其作為一個字符串值傳遞給查詢。要獨立傳遞每個 ID,您必須使用多個參數(shù):


$results = parent::model(__CLASS__)->findAllBySql(

   'SELECT column FROM table WHERE some_id IN (:id1, :id2, :id3)',

    ['id1' => 1, 'id2' => 32, 'id3' => 10]

);

或者避免使用參數(shù)并使用串聯(lián)/插值,但您需要首先清理/引用值,以確保不存在 SQL 注入風險:


$ids = implode(', ', array_map('intval', $someIds);

$results = parent::model(__CLASS__)->findAllBySql(

   "SELECT column FROM table WHERE some_id IN ($ids)"

);

但最安全、最方便的選擇可能是用于CDbCommand構建查詢:


$result = Yii::app()->db->createCommand()

    ->select('column')

    ->from('table')

    ->where(['IN', 'id', $ids])

    ->queryColumn();


查看完整回答
反對 回復 2023-10-01
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

我認為這是一種解決方法,但不是解決方案。我更改了代碼以使用 CDbCriteria,但我發(fā)現(xiàn)它不是最佳的,因為它將獲取所有字段。至少它產生了我預期的結果:


$c = new CDbCriteria();

$c->compare('some_id', $someIds);

$result = $this->findAll($c);


return array_column($result, 'column');


查看完整回答
反對 回復 2023-10-01
  • 2 回答
  • 0 關注
  • 167 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號