-1

我正在尝试对一个小的 MYSQL 表进行简单的查询,但是当我插入 Where 子句时,我突然收到一个无效的查询错误(while(mysql_fetch_array ){}在没有 where 的情况下添加了一个)。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有问题吗?

4

3 回答 3

10

INDEX是 MySQL 的保留字之一:

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

如果您按照第 8.2 节“模式对象名称”中的描述引用保留字,则允许它们作为标识符</a>

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

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

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

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


为了完成我的回答,在看到dustmachine的一个之后,他说:

我有点惊讶它在创建表时没有抱怨。

我想该表是使用 phpMyAdmin 或 MySQL Workbench 等工具创建的;并且那些一般(对于某些人来说总是)引用列名,以避免这种问题。


评论后编辑:我没看到,但你正在使用这种代码:

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

mysql_query函数不会直接返回数据:它只返回一个“资源” (引用手册页)

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

不确定它会解决你所有的问题(什么都没有显示,甚至原始的 HTML 标签也不奇怪),但它至少可能有点帮助......

于 2009-12-04T21:10:25.020 回答
1

我认为问题在于这个词的使用index——这是一个具有特殊含义的保留词,不应该用作列名。我有点惊讶它在创建表时没有抱怨。

于 2009-12-04T21:11:53.850 回答
1

试试这个,它对我有用:

$query="SELECT * FROM quotes WHERE index='$ind'";
于 2011-10-09T03:54:50.650 回答