2010-02-22 108 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