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" 部分就可以了。

这是错误:

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

SQL 使用 Select。如果您正在运行查询,请始终对列名使用反引号:

$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,
));

您使用双引号的解决方案也是解决此类冲突的有效解决方案。但我相信使用 backthicks 更常用,因为它提高了可读性。

于 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 回答