2013-01-21 69 views
1

有人可以請幫我這個SQL查詢。它給了我一個1064錯誤,提示我在查詢中有語法錯誤。我現在已經查找了2個多小時的錯誤,現在感到沮喪。這裏MySQL 1064語法錯誤不能找到錯誤

SELECT 
SUM(IF((`date` >= DATE_SUB(?, INTERVAL 6 MONTH)) AND (`date` < DATE_SUB(?, INTERVAL 5 MONTH)), earnings, 0)) AS Rev5, 
SUM(IF((`date` >= DATE_SUB(?, INTERVAL 5 MONTH)) AND (`date` < DATE_SUB(?, INTERVAL 4 MONTH)), earnings, 0)) AS Rev4, 
SUM(IF((`date` >= DATE_SUB(?, INTERVAL 4 MONTH)) AND (`date` < DATE_SUB(?, INTERVAL 3 MONTH)), earnings, 0)) AS Rev3, 
SUM(IF((`date` >= DATE_SUB(?, INTERVAL 3 MONTH)) AND (`date` < DATE_SUB(?, INTERVAL 2 MONTH)), earnings, 0)) AS Rev2, 
SUM(IF((`date` >= DATE_SUB(?, INTERVAL 2 MONTH)) AND (`date` < DATE_SUB(?, INTERVAL 1 MONTH)), earnings, 0)) AS Rev1, 
SUM(IF((`date` >= DATE_SUB(?, INTERVAL 1 MONTH)) AND (`date` < ?), earnings, 0)) AS Rev0 
FROM 
hat_adsense_stats 
GROUP BY 
domain 
ORDER BY 
domain 

感謝是錯誤:

Error Code: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, INTERVAL 1 MONTH)) AND (date < ?), earnings, 0)) as Rev0 FROM hat_adsens' at line 2

+0

PLZ使SQL語法,通過適當的格式可讀性... –

+0

是否使用PDO,mysqli的,或者一些其他語法將值綁定到您的參數?如果是這樣,你是否綁定了正確的參數類型? –

+0

@SantoshGhimire:並且請不要使用leet說話讓你的評論可讀。 –

回答

2

你有parameter place holders您的查詢,這不純粹的SQL工作。 ?唯一的作品是當你創建一個Dynamic SQL

如果您使用的查詢不是Dynamic SQL,則應爲此提供一個值。

在例如除去對語句的語法錯誤是創建一個user variable,如

SET @date = CURDATE(); 
SELECT 
SUM(IF((`date` >= DATE_SUB(@date, INTERVAL 6 MONTH)) AND (`date` < DATE_SUB(@date, INTERVAL 5 MONTH)), earnings, 0)) AS Rev5, 
SUM(IF((`date` >= DATE_SUB(@date, INTERVAL 5 MONTH)) ........ 
+1

謝謝你是這個問題! :)我從朋友那裏得到了原始代碼,並在普通的sql-yog中進行了測試。我在PHP和MySQL PDO中使用它。在代碼環境中工作時,它可以工作100%。 –

+0

當您使用'PDO'時,只需將'?'作爲參數值。 –

+0

不客氣':D' –