我正在尝试对一个小的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有问题吗?
答案 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'";