未找到列:1054未知列'数组'在' order子句'警予

时间:2017-05-11 11:33:00

标签: php mysql yii

我正在尝试使用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未知列'数组'在'订单条款'。

我无法理解这有什么问题?有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

您目前正在为这两种情况添加数组。我对Yii不太熟悉,但我很确定它需要一个字符串作为订单 - 而不是数组。

您可以namespace :api, defaults: {format: 'json'} do scope module: :v1 do resources :dashboard, controller: "account/dashboard" post '/account/settings/create_notification' => 'account/settings#create_notification' post '/users/register' => 'users#create' post 'users/register_handheld' => 'handheld_users#create' put 'users/update_profile' => 'handheld_users#update_profile' post 'users/login' => 'handheld_users#login' 将其转换为字符串。

implode()

由于您的数组当前只包含整数(3和2),因此您无需引用它 - 但如果数组因任何原因包含字符串,则需要在MySQL中引用它们

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

注意添加的单引号。

当您尝试将数组用作字符串时,PHP将只打印“数组”,这就是您现在所看到的。由于没有引用,MySQL认为它是一个列,而不是一个字符串。