1

我正在尝试使用 createCommand 查询列,执行如下操作:

 Yii::$app->db->createCommand('Select column1 from table where column2 in :array)
        ->bindValues(['array'=>['(1,2,3,4,5)',  PDO::PARAM_INT]])->queryColumn('COLUMN1');

理想情况下,我希望我的 SQL 语句像这样执行

select column1 from table where column2 in (1,2,3,4,5)

但是,当 SQL 执行时,绑定的参数周围总是有引号,如下所示:

select column1 from table where column2 in '(1,2,3,4,5)'

我不确定为什么在我指定 PDO 使用 PDO::PARAM_INT 后仍然会发生这种情况。不应该不引用 int 吗?

4

1 回答 1

0

您可以使用 Query Builder 尝试稍微不同的方法:

$rows = (new \yii\db\Query())
    ->select('column1')
    ->from('table')
    ->where(['column2' => [1,2,3,4,5]])
    ->column();

这具有预期的效果:由于传入的数组,使用 in (...) 语法自动生成 where 子句。

如果数组的类型恰好在 PHP 内部是 STRING 类型,则不确定是否需要将数组的类型显式转换为 INT ......

于 2017-08-18T16:27:02.467 回答