2013-12-10 92 views
0

我正在使用預處理語句處理傳入的發佈數據,清理數組,並插入MySQL數據庫。爲什麼這個MySQL語句的語法錯誤?

這裏是SQL語句在提交之前:

INSERT INTO LoggedCarts (Bill-Address1,Bill-Address2,Bill-City,Bill-Company,Bill-Country,Bill-Email,Bill-Firstname,Bill-Lastname,Bill-Name,Bill-Phone,Bill-State,Bill-Zip,Card-Expiry,Card-Name,Card-Number,Comments,Date,ID,IP,Item-Code-1,Item-Count,Item-Description-1,Item-Id-1,Item-Quantity-1,Item-Taxable-1,Item-Thumb-1,Item-Unit-Price-1,Item-Url-1,Numeric-Time,Ship-Address1,Ship-Address2,Ship-City,Ship-Company,Ship-Country,Ship-Email,Ship-Firstname,Ship-Lastname,Ship-Name,Ship-Phone,Ship-State,Ship-Zip,Shipping,Space-Id,Store-Id,Store-Name,Tax-Charge,Total) VALUES ("Pineapple Highway","","Orange","","US United States","[email protected]","Bob","Dole","Bob Dole","9075554509","CA","97056","","Check","NumberTemporarilyUnavailable","","Tue Dec 10 16:55:11 2013 GMT","yhst-130408242826480-485","50.78.241.193","TERRALUX-TT-5","1","Terralux TT-5 LED Tactical Flashlight 650 Lumens Uses 2 x CR123 or 1 x 18650","terralux-tt-5","3","YES","","112.49","http://www.batteryjunction.com/terralux-tt-5.html","1386694511","Pineapple Highway","","Orange","","US United States","[email protected]","Bob","Dole","Bob Dole","9075554509","CA","97056","Air (3-5 days)","","yhst-130408242826480","BatteryJunction.com","0.00","337.47") 

問題是,什麼是錯的語法?相同的代碼也用於保存放棄的購物車的不同表格,並且它可以很好地寫入。

注意:正如以下指出的那樣,在列名稱中使用連字符是不合適的,因爲它在提交查詢之前需要特殊準備。在這種情況下,我將列名與傳入的發佈數據鍵數組進行匹配。我可以通過並清理關鍵數組,刪除連字符,這可能是一種替代解決方案。

總而言之,正如以下建議的那樣,爲什麼此SQL語句失敗的問題的正確解決方案是在列名稱中使用特殊字符(連字符),從而導致需要使用列周圍的反引號名稱(backtick =`where astroprophe ='),允許不間斷地讀取列名。

觀察破由發生在phpMyAdmin測試聲明原文:

#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 '-Address1,Bill-Address2,Bill-City,Bill-Company,Bill-Country,Bill-Email,Bill-Firs' at line 1 

便從一個線索,爲什麼聲明失敗。

感謝您的幫助!

+1

@bksi'ID'不是[保留字](http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html)。 – tadman

+0

總是最好使用下劃線。我從來都不喜歡用連字符作任何事情;很高興我沒有。 –

回答

7

您需要使用帶反引號的特殊字符轉義列名。 -是一個特殊字符。使用

INSERT INTO LoggedCarts (`Bill-Address1`, ... 
+0

像這樣的事情,使列名像那樣超級討厭。儘量不要使用這種尷尬的命名約定來創建模式。 – tadman

1

如果這些字段名稱確實包括減號,那麼他們需要反引號:

`Bill-Address1` 
-1

試着用單引號,而不是插入的字符串值。

+0

這在MySQL中使用默認設置並不重要。 – tadman