数据库错误

2016-07-07 15:13 来源:www.chinab4c.com 作者:ecshop专家

出现时间:大约有两个礼拜了
出现原因:当前商品买家只要下过订单之后,就会出现访问页面数据库错误
错误提示:MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Error ) [1] => Array ( [sql] => SELECT u.user_name, og.goods_number, oi.add_time, IF(oi.order_status IN (2, 3, 4), 0, 1) AS order_status FROM `meifuyou_store`.`store_order_info` AS oi LEFT JOIN `meifuyou_store`.`store_users` AS u ON oi.user_id = u.user_id, `meifuyou_store`.`store_order_goods` AS og WHERE oi.order_id = og.order_id AND 1356344195 - oi.add_time < 2592000 AND og.goods_id = 8 ORDER BY oi.add_time DESC LIMIT 5 ) [2] => Array ( [error] => BIGINT UNSIGNED value is out of range in '(1356344195 - `meifuyou_store`.`oi`.`add_time`)' ) [3] => Array ( [errno] => 1690 ) )

出现这个后,刷新网页,标为红色的字会改变

约几个小时,页面又会自动修复

不会是数据库的问题,以前没有错误,且网站也没有改过什么东西
当然也尝试过修复数据库了,没有发现问题

回答:
此为链接地址:
http://www.tfmok2003.com/goods.php?id=8

因为有买家下过订单,就会此错误

额 这问题之前我也遇到过 后面朋友帮忙解决的

alter table ecs_order_info modify order_id int(10) unsigned not null default '0'



在商品购买记录里面找到下面代码:
AND ' . time() . ' - oi.add_time < 2592000
改为 AND oi.add_time > '.gmtime().' - 2592000
生成订单用的是gmtime,这里计算用time(),时间不一致,计算的不是真实的30天数据。
因为时区设置的关系(你的估计是西区,time()比gmtime()小),time() . ' - oi.add_time 可能得到的是一个负数,造成溢出错误了。

就算没有错误,也应该用后一种写法,如果add_time有索引的话,这样写就能用上索引了,效率会高很多。
ecshop大量这种垃圾代码。
男士围巾




不错,专业回答,我现在时区更改为中国区以后,再尝试下订单,不会出现此问题,解决

嗯,好好的跟楼上的学习下。




改过后,不过你怎么设置时区都不会有问题。时间计算也比较准确。

确实不错收藏了