我正在尝试使用CDbCriteria中的Yii 1查询数据库。我正在做的是:

$criteria->addInCondition('t.id', $dealIdArr);
$criteria->order = "FIELD(t.id, $dealIdArr)";


这是$dealIdArr,它不是空的:

Array ( [0] => 3 [1] => 2 )


但是,当运行脚本时,它将返回错误:


  CDbCommand无法执行以下SQL语句:SQLSTATE [42S22]:
  找不到列:1054'order子句'中的未知列'Array'。


我不明白这是怎么回事?有什么帮助吗?

最佳答案

您当前正在向两个条件添加一个数组。我对Yii不太熟悉,但是我很确定它需要命令的字符串-而不是数组。

您可以implode()将其转换为字符串。

$dealIdStr = implode(", ", $dealIdArr);
$criteria->addInCondition('t.id', $dealIdArr); // You can use array here
$criteria->order = "FIELD(t.id, $dealIdStr)"; // This expects a string


由于您的数组当前仅包含整数(3和2),因此不需要用引号引起来-但是,如果由于某种原因该数组包含字符串,则需要在MySQL中用引号将它们引起来

$dealIdStr = implode("', '", $dealIdArr);
$criteria->order = "FIELD(t.id, '$dealIdStr')";


请注意添加的单引号。

当您尝试使用数组作为字符串时,PHP会简单地显示“ Array”,这就是您现在所看到的。而且由于没有引用,MySQL认为它是一列,而不是字符串。


http://php.net/implode

09-10 09:57
查看更多