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();

TA貢獻1943條經驗 獲得超7個贊
我認為這是一種解決方法,但不是解決方案。我更改了代碼以使用 CDbCriteria,但我發(fā)現(xiàn)它不是最佳的,因為它將獲取所有字段。至少它產生了我預期的結果:
$c = new CDbCriteria();
$c->compare('some_id', $someIds);
$result = $this->findAll($c);
return array_column($result, 'column');
- 2 回答
- 0 關注
- 167 瀏覽
添加回答
舉報