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替换为安装包中默认文件就解决问题了 。
新闻热点
疑难解答