我正在尝试使用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未知列'数组'在'订单条款'。
我无法理解这有什么问题?有什么帮助吗?
答案 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认为它是一个列,而不是一个字符串。