Yii2 将参数绑定到 IN 字段的原始 sql 语句
Yii2 bind param to the raw sql statement for the IN field
当我在 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 中添加了单引号。我该如何处理??
代码可以重构为:
Yii::$app
->db
->createCommand()
->delete('article_tag', ['article_id' => $this->id, 'tag_id' => $arr])
->execute();
使用框架功能,更复杂的查询需要编写原始 SQL。
请参阅 this question 了解如何自动绑定参数。
Here你可以看到如何给where语句指定条件
在大多数情况下,最好创建 ActiveRecord
并使用 ActiveQuery
来构建查询。
当我在 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 中添加了单引号。我该如何处理??
代码可以重构为:
Yii::$app
->db
->createCommand()
->delete('article_tag', ['article_id' => $this->id, 'tag_id' => $arr])
->execute();
使用框架功能,更复杂的查询需要编写原始 SQL。
请参阅 this question 了解如何自动绑定参数。 Here你可以看到如何给where语句指定条件
在大多数情况下,最好创建 ActiveRecord
并使用 ActiveQuery
来构建查询。