如何在YII框架中绑定数组参数?

Che*_*rry 9 php yii yii1.x

我有以下情况的PHP:

$inputs = "1,2,3,4,5";
$sql = "SELECT * FROM obj WHERE id IN(:input)";

$commond = Yii::app()->db->createCommand($sql);
$commond->bindValue(":input", $inputs , PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)

我用yii提供db函数:

$inputs = "1,2,3,4,5";
$sql = "SELECT * FROM obj WHERE id IN(:input)";

$commond = Yii::app()->db->createCommand($sql);
$commond->bindValue(":input", $inputs , PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)

但查询结果是正确的,所以如果这样我该怎么办?

Uda*_*ant 7

现在用它就像这样

$command = Yii::app()->db->createCommand()
    ->select()
    ->from('tableName')
    ->where(array('in', 'id', explode(',', $inputs)));
Run Code Online (Sandbox Code Playgroud)

我会试着用$command->bindValue()方法回来.


Art*_*rth 6

在我的项目中遇到过这个问题几次我已经提出了以下Yii使用CDbCriteria来解决这个问题,这是一个有点hacky,但它提供了param计数匹配的安全性.

当应用于您的示例时,我的代码将是:

$inputs = array(1,2,3,4,5);
$criteria = new CDbCriteria();
$criteria->addInCondition('id',$inputs);

$sql = 'SELECT * FROM obj WHERE '.$criteria->condition;
$command = Yii::app()->db->createCommand($sql);
$results = $command->queryAll(true, $criteria->params);
Run Code Online (Sandbox Code Playgroud)

UPDATE

实际上有更简洁的方法来构建Yii:

$results = Yii::app()->db->createCommand()
   ->select()
   ->from('obj')
   ->where(['in', 'id', $inputs])
   ->queryAll();
Run Code Online (Sandbox Code Playgroud)

文档