2009-12-04 62 views
-1

我想對一個小的MYSQL表做一個簡單的查詢,但是當我插入Where子句時,我突然收到一個無效的查詢錯誤(在沒有where的情況下添加了一個while(mysql_fetch_array){}) 。 MYSQL控制檯給出了1064(語法)錯誤,但是,我檢查了MYSQL文檔,並且根據我的確定我使用了正確的語法。每當WHERE語句存在時,PHP 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有什麼問題嗎?

回答

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標籤爲奇數),但它至少可能有點幫助...

+0

這樣做,消除錯誤,但不產生輸出。打印語句不會將任何東西放入源文件中,而不是事件原始HTML(它們在沒有WHERE和while循環的情況下打印正確)。 – Elliot 2009-12-04 21:14:28

+0

使用未保留的不同密鑰(afil)的位置也不會產生任何輸出。 – Elliot 2009-12-04 21:17:31

+0

請確保您使用的是後面的勾號而不是單引號。即使用'而不是' – Buggabill 2009-12-04 21:18:55

1

我覺得問題是使用單詞index - 這是一個reserved word具有特殊含義,不應該用作列名稱。我有點驚訝,它沒有抱怨表創建時。

1

試試這個,它爲我工作:

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