我正在尝试使用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