只要存在WHERE语句,PHP MySQL就会失败

时间:2009-12-04 21:06:01

标签: php mysql syntax mysql-error-1064

我正在尝试对一个小的MYSQL表进行简单的查询,但是当我插入Where子句时,我突然得到一个无效的查询错误(在没有where的情况下工作时添加了while(mysql_fetch_array ){})。 MYSQL控制台提供了1064(语法)错误,但是,我检查了MYSQL文档,并且我正在使用正确的语法。

<?php
$ind=rand(1,3);
$quote=Null;
$sign=Null;
$afil=Null;
$con=mysql_connect(localhost,root,********);//connect to database
mysql_select_db("phone_site",$con);//select table
$query="SELECT * FROM quotes WHERE index=$ind";//get the row for that index
$data=mysql_query($query);
//print out text
print ("<p id=\"quote\">" . $data['quote'] . "</p>");
print ("<p id=\"ename\">" . $data['sign'] . "</p>");
print ("<p id=\"afill\">--  " . $data['afil'] . "</p>");
mysql_close($con);//close connection
?>

任何人都知道问题是什么?我正在使用XAMPP。它的MYSQL有问题吗?

3 个答案:

答案 0 :(得分:11)

INDEX是MySQL Reserved Words之一:

  

某些单词,例如SELECT,DELETE,   或BIGINT保留并要求   特殊处理用作   表和列等标识符   名。这也可能适用于   内置函数的名称。

     

允许使用保留字   标识符,如果您引用它们   在Section 8.2, “Schema Object Names”

中描述

如果您有一个具有此类名称的列,则必须引用列名称 - 请参阅Schema Object Names

  

标识符引号字符是   反击(“”“)

这意味着您的查询应如下所示:

$query="SELECT * FROM quotes WHERE `index`=$ind";


在看到dustmachine's one之后,为了完成我的回答,谁说:

  

我有点惊讶它没有   桌子创建时抱怨。

我认为该表是使用phpMyAdmin或MySQL Workbench等工具创建的;而那些通常(总是为某些人)引用列名,以避免这种问题。


评论后修改:我没有看到,但您使用的是此类代码:

$data=mysql_query($query);
print ("<p id=\"quote\">" . $data['quote'] . "</p>");

mysql_query函数不会直接返回数据:它只返回“ressource”(引用手册的页面)

  

返回的结果资源应该是   传递给mysql_fetch_array(),   和其他处理功能   结果表,访问返回的   数据

不确定它是否会解决所有问题(没有显示任何内容,甚至原始HTML标记都不奇怪),但它至少可能有所帮助......

答案 1 :(得分:1)

我认为问题是使用单词index - 这是一个具有特殊含义的reserved word,不应该用作列名。当桌子被创建时,我有点惊讶它没有抱怨。

答案 2 :(得分:1)

试试这个,它对我有用:

$query="SELECT * FROM quotes WHERE index='$ind'";