【问题标题】:Yii2 SQLSTATE[HY093]: Invalid parameter number: no parameters were boundYii2 SQLSTATE[HY093]:参数号无效:没有绑定参数
【发布时间】:2016-05-31 06:17:13
【问题描述】:

在我的 ModelSearch 中,我有这样的代码:

$candidates = Candidate::find();
$dataProvider = new ActiveDataProvider([
   'query' => $candidates
]);

然后我试图继续这个查询:

$candidates->andFilterWhere([
   ' or ',
   ['like', 'candidate.something', $this->word],
   ['like', 'candidate.anything', $this->word]
]);

最后我返回$dataProvider

我记得我多次使用这种代码并且从未遇到任何问题,但出乎意料的是,在整个尝试之后我仍然收到相同的错误:

SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
The SQL being executed was: SELECT COUNT(*) FROM (SELECT * FROM `candidate` WHERE Array OR 'like' GROUP BY `candidate`.`id`) `c`

当我以这种方式编写这段代码时:

$candidates->andFilterWhere([
   ' or ',
   'candidate.`something` LIKE "%' . $this->word . '%" ',
   'candidate.`anything` LIKE "%' . $this->word . '%"',
]);

它似乎有效,但我不想那样做。我想问题的线索可能在其他地方,但我不知道我应该在哪里寻找它。

有什么建议吗?

最好的问候。

[编辑] 已解决:

@arogachev 的提示被证明是正确的方法:只需删除or”中的空格即可。 QueryInterface 无法识别未修剪的条件运算符,这就是它被愚弄的原因(顺便说一下我)。

【问题讨论】:

  • 请完整显示查询构造过程。还可以尝试去除or 中的空格,参见示例here
  • @arogachev,你是对的。问题在于or 运算符周围的空间。谢谢!

标签: activerecord yii2


【解决方案1】:

[编辑] 已解决:

@arogachev 的提示被证明是正确的方法:只需从“or”中删除空格即可。 QueryInterface 无法识别未修剪的条件运算符,这就是它被愚弄的原因(顺便说一下我)。

【讨论】:

    【解决方案2】:

    尝试使用或喜欢

    $candidates->andFilterWhere([
      ['or like', 'candidate.something', $this->word],
      ['or like', 'candidate.anything', $this->word]
    ]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 2012-06-13
      • 1970-01-01
      相关资源
      最近更新 更多