0

これに対して毎回構文エラーが発生します。

$skills = SubSkills::model()->findAll(array('order'=>'number DESC','condition'=>'number > 0 AND user_id=:user_id AND select = 0', 'params'=>array(":user_id" =>1),'offset'=>0,'limit'=>2,
));

"select = 0"の部分をなくせばOKです。

エラーは次のとおりです。

CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select < 1 ORDER BY number DESC' at line 1

行名としての「SELECT」はMySQLと競合するためだと思います。それを逃れる方法はありますか?

ありがとうございました!

4

2 に答える 2

2

Select は SQL で使用されます。クエリを実行している場合は、常に列名にバッククォートを使用します。

$skills = SubSkills::model()->findAll(array('order'=>'number DESC','condition'=>'number > 0 AND `user_id` = :user_id AND `select` = 0', 'params'=>array(":user_id" =>1),'offset'=>0,'limit'=>2,
));

二重引用符を使用したソリューションも、このような競合を解決するための有効なソリューションです。しかし、読みやすさが向上するため、バックシックを使用する方が一般的に使用されていると思います。

于 2013-07-22T12:20:00.093 に答える
0

コードを次のように変更して問題を修正しました

$skills = SubSkills::model()->findAll(array('order'=>'number DESC','condition'=>'number > 0 AND user_id=:user_id AND "select" = 0', 'params'=>array(":user_id" =>1),'offset'=>0,'limit'=>2,
));

これにより、競合が回避されます。

于 2013-07-22T09:54:30.783 に答える