Yii2将param绑定到IN字段的原始sql语句

时间:2015-11-18 08:08:22

标签: sql yii2 dao

当我在Yii2中使用bindParam时:

$arr = [1,3];
$str = implode(' ,', $arr);
Yii::$app->db->createCommand('DELETE FROM article_tag WHERE article_id=:id AND tag_id IN (:str)')
        ->bindValue(':id', $this->id)
        ->bindValue(':str', $str)
        ->execute();

如果我将str绑定到IN字段,则原始sql似乎变为

SQLSTATE[22007]: Invalid datetime format: 1292 Truncated incorrect DOUBLE value: '1 ,3'
The SQL being executed was: DELETE FROM article_tag WHERE article_id=13 AND tag_id IN ('1 ,3')

它告诉我这里的双重值不正确。我想这是因为它为sql添加了单引号。我怎么能处理这个?

1 个答案:

答案 0 :(得分:2)

代码可以重构为:

Yii::$app
    ->db
    ->createCommand()
    ->delete('article_tag', ['article_id' => $this->id, 'tag_id' => $arr])
    ->execute();

使用框架功能,更复杂的查询需要编写原始SQL。

请参阅this question了解params如何自动绑定。 Here您可以看到如何为where语句指定条件。

对于大多数情况,最好创建ActiveRecord并使用ActiveQuery来构建查询。