IT Knowledge Base

~ Without sacrifice, there can be no victory ~

發佈日期:

分類:

, ,

如何在PHP中,解決MySQL出現的錯誤(Error #1064)

之前寫一個用PHP執行的MySQL句子,出現一個很奇怪的問題,在Windows XP下的XAMPP伺服器下運行沒有問題,在網上IPOWER的伺服器也沒有問題,唯獨在自己家中的伺服器下,相同的程式碼卻出現不能新增(INSERT)資料的問題,但刪除(DELETE)、更新(UPDATE)又沒有問題。把在PHP執行的結果,用phpMyAdmin檢查,卻出現錯誤#1064。原執行的MySQL句子是:

INSERT calendar_record (id, eid, title, start_date, start_time, end_date, end_time, all_day_event, url, active, create_user, modify_user, type) VALUES (0, '2011-10-25-11-37-16-51', 'Testing', STR_TO_DATE('25/10/2011','%d/%m/%Y'), '8:00', '', '9:00', '', '', 1, 'pmrc', 'pmrc', 'meeting')

錯誤是:

#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 'INSERT 'calendar_record' (id, eid, title, start_date, start_time, end_date, e' at line 1

根據MySQL手冊,錯誤#1064為使用了限制的字串。但試過了在可能有問題的字串前後加上Acute(`)符號,問題依舊出現。

01. 排除系統設定有問題後,打開了phpMyAdmin,一步一步檢查問題出現的原因。

02. 第一個發現的問題,是程式碼的檔案,在NOTEPADD++使用了UTF8編碼,在執行時,便會有可能出現錯誤#1064。只要把檔案編碼更改為ANSI編碼,並張Comma(,)符號之後的空格刪除,便可解決問題。

03. 第二個問題,是在MySQL句子中,日期如沒有資料(NULL FIELD),在XMAPP伺服器及IPOWER的伺服器上,程式會把它儲存為0000-00-00。但在家中的伺服器上,卻會出現錯誤,一定要把日期設為0000-00-00字串。

04. 第三個問題,是在PHP程式中,$all_day_event = FALSE;這一句不能被MySQL接受為0或1的數字,一定要設定為$all_day_event = 0;或$all_day_event = 1。

05. 第四個問題,是在PHP程式中,如用SELECT句子,取得MySQL表格內資料時,在XMAPP伺服器及IPOWER的伺服器上,會首先取得最先一列的資料,跟家中伺服器,會取得最後一列資料不同,故在SELECT句子中,最好加上ORDER BY一項,以保證出來結果一定無問題。

06. 最終結果。

INSERT calendar_record (id,eid,title,start_date,start_time,end_date,end_time,all_day_event,url,active,create_user,modify_user,type) VALUES (0, '2011-10-25-11-37-16-51', 'Testing', STR_TO_DATE('25/10/2011','%d/%m/%Y'), '8:00', '0000-00-00', '9:00', 0, '', 1, 'pmrc', 'pmrc', 'meeting')

註:家中伺服器使用的Apache版本為2.2.21、PHP版本為5.3.8、MySQL版本5.5.17。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *