Echop是一款非常不錯的網店開源程序,它的用戶面量很大,今天在幫一個用戶遷移的時候出現了一個很不常見的錯誤,“MySQL server error report:Array…..” 詳細如下:
問題現象
網站在遷移后,訪問后臺正常,訪問首頁出現如下報錯。數據庫保證沒有缺少。
MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Error )
[1] => Array ( [sql] => SELECT c.cat_id, c.cat_name, c.sort_order, a.article_id,
a.title, a.file_url, a.open_type FROM `s5jg****_data`.`teashop_article` AS a LEFT
JOIN `s5jgj****_data`.`teashop_article_cat` AS c ON a.cat_id = c.cat_id WHERE
c.cat_type = 5 AND a.is_open = 1 AND C.cat_id != 14 ORDER BY c.sort_order ASC,
a.article_id ) [2] => Array ( [error] => Unknown column 'C.cat_id' in 'where clause' )
[3] => Array ( [errno] => 1054 ) )
現象分析
一般情況下,我們的網站報Unknown column ‘****’ in ‘where clause’我們開始都會想到,是不是網站在遷移的過程中,數據庫出現了丟失。
在重新下載數據庫,導入之后。可以完全確定數據庫是沒問題的。那么,這會是什么問題呢。小編在查詢相關資料后,總結出現以上問題主要有以下幾個方面:
1、teashop_article表中確實缺少這個列。
2、teashop_article 表前面多了一個小的可以忽略的空格,沒有看到。
3、php中的sql字符串,字段變量或者關鍵字用的雙引號。比如:WHERE products_id = “test”,將test旁邊的雙引號,改成單引號就可以。
4、linux主機對文件名大小寫比較敏感,PHP程序中,或者數據庫的列名是大寫。
問題解決
明白了是什么原因造成,問題就很容易解決了。我們仔細看一下上面的那個錯誤提示,發現“Unknown column ‘C.cat_id’ in ‘where clause’”里的列名里的C是大寫的.
而小編輯在本地測試的是純正是linux系統,所以可以肯定是因為用戶修改了自己的程序,語句中編寫不規范導致。我們把用戶修改過的文字main.php替換為安裝包中默認文件就解決問題了 。
新聞熱點
疑難解答