2011-04-16 126 views
1

我一直坐了几个小时,试图找到ColdFusion告诉我的MySQL语法的问题,但我看不到它。这里是我的查询:这个MySQL语法中的错误在哪里?

SELECT * 
FROM message_table 
WHERE useridto = #session.userid# AND read = 0 

我得到的错误是告诉我:

“你在你的SQL语法错误; 检查对应于 你的MySQL服务器版本的手册对于 正确的语法使用近“读=‘第4" 行

0’” 而我研究的MySQL,检查过去的查询我已经做到了有IDEN TICAL语法和工作。我错过了简单的事情吗?

我应该提到#session.userid#确实输出,所以不是这样。

+0

您是否用撇号“'''包装值?例如读='0'? – eandersson 2011-04-16 21:30:52

+0

您输入的查询与错误中的查询不匹配。我在错误消息中看到'read ='0''中的'read = 0'的差异。这是什么? – 2011-04-16 21:31:49

+0

对不起,我曾尝试过,没有发现任何区别。 – sean 2011-04-16 21:48:34

回答

6

read是MySQL中的保留关键字:

http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

这可能会导致问题为好。我会改变你的列名或执行以下操作:

SELECT * 
FROM message_table 
WHERE useridto = #session.userid# AND `read` = 0 

的标识符可能被引用或 带引号。如果一个标识符包含 特殊字符或者是保留 字,你必须引用它,只要你 提到它
的标识符引号字符是反引号(“`”):

每:http://dev.mysql.com/doc/refman/5.5/en/identifiers.html

+1

在CF中,用'#'围绕变量将输出变量的值。 – phixr 2011-04-16 21:34:16

+0

当替换时,CF可能会正确限定'session.userid'的引号。我的猜测是'read'是一个关键字,或者用引号括起整数是问题所在。 – 2011-04-16 21:35:08

+1

我不认为'#session.userid#'是他的问题,因为MySQL错误发生在'read ='0''。 – 2011-04-16 21:40:58

3

read是一个MySQL关键字。尝试使用反引号(`)来包围它:

SELECT * FROM message_table WHERE useridto = 5 AND `read` = 0