2010-02-22 107 views
3

我有一个简单的SQL查询,一直抛出SQL语法错误。它看起来像这样:简单的查询抛出SQL语法错误

$sql = "SELECT COUNT(*) AS TOTAL FROM PRODUCT WHERE ID_PRODUCT = ".$id; 
$result = mysql_query($sql) or die(mysql_error()); 

会抛出:

您的SQL语法错误; 检查对应 你的MySQL服务器版本的 正确的语法使用近“WHERE ID_PRODUCT = 1”在行1

我不明白这是怎么回事手册。当然,如果我直接在phpMyAdmin中尝试查询,它没有问题。

它与SELECT *

编辑正好返回相同的错误:ID_PRODUCT是一个外键...

更新:通过更换$ id变量时,我也得到了同样的错误$ sql字符串WHERE ID_PRODUCT = 2中的一个静态值以及使用引号保护名称的情况。

+0

如果你运行该代码,你会得到'语法错误,意外的T_VARIABLE',因为你缺少一个分号。请提供您实际使用的代码。当人们调试那些不是您的代码的东西时,他们通常无法修复您的代码,因为它不像您想象的那样相似。 – Quentin 2010-02-22 12:51:48

+0

你的表结构是什么样的? – espais 2010-02-22 12:52:13

+0

ID_PRODUCT字段的类型是什么? – Brabster 2010-02-22 12:53:06

回答

2

尝试完全重新输入$sql行,你可能会意外地在那里有一个隐形的扩展字符(例如一个非破坏空间而不是常规空间等)。

3

如果ID_PRODUCT列是一个varchar,则需要在where子句中将值放在单引号内。可能是这样的,没有关于你的模式的信息是无法分辨的。


更新:不确定。明显的下一步是打印出生成的SQL并尝试手动运行它,希望问题会显现出来,您将能够排除PHP作为问题的根源。

+0

ID_PRODUCT是一个INT。更精确地说它是一个int(11) – Jla 2010-02-22 12:56:25

+0

什么样的数据库?你需要指定一个模式还是一个表所有者? – Brabster 2010-02-22 13:05:01

+0

感谢您的帮助。我复制粘贴在phpMyAdmin的查询,它正常工作... – Jla 2010-02-22 13:06:20

0

尝试引用您的表,列和标识符名称。考虑区分大小写。不要为表,列或标识符使用全部大写名称。

编辑:为了可读性,主要是,但也可能防止与保留关键字的冲突。

我的线沿线的思考:

SELECT COUNT(*) AS "total" FROM "Product" WHERE "id_Product" = 1

注意,MySQL使用非标准反引号字符(`)默认情况下引用这些。 (虽然它们没有正确显示在这里,所以我不妨使用双引号。)

+0

引号没有帮助。我用完整的首都来坚持数据库的其余部分。但我很想知道为什么这是一个坏习惯,可读性? – Jla 2010-02-22 13:11:02

+0

完整的大写字母用于SQL语句中的关键字,主要是为了便于阅读。 – outis 2010-02-22 13:22:06