我有以下情况的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)
但查询结果是正确的,所以如果这样我该怎么办?
现在用它就像这样
$command = Yii::app()->db->createCommand()
->select()
->from('tableName')
->where(array('in', 'id', explode(',', $inputs)));
Run Code Online (Sandbox Code Playgroud)
我会试着用$command->bindValue()方法回来.
在我的项目中遇到过这个问题几次我已经提出了以下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)
见文档
| 归档时间: |
|
| 查看次数: |
20322 次 |
| 最近记录: |