不知道是客户自身数据的问题还是方维程序的问题,今天有客户反映,在浏览别人的 个人中心->宝贝 这个页面时,点击右边分享的宝贝时,如果该宝贝是被喜欢的,就会出现数据库查询错误:
该访问链接是:
http://www.xxxxxxx.com/note.php?action=g&sid=12645&id=6757
错误信息:
sql语句很明显的错误,是在in()括号中最后一个值后面多了一个“,”号,
这条查询语句的位置在:
core/service/share.service.php文件的 public function getCollectShareByShare($share_id,$num = 20)函数中,
注意下面红色字体
if(count($uids) > 0)
{
$share_ids = array();
$res = FDB::query(‘SELECT GROUP_CONCAT(DISTINCT sgi.share_id
ORDER BY sgi.share_id DESC SEPARATOR /’,/’) AS share_ids,sgi.uid
FROM ‘.FDB::table(‘user_collect’).’ AS uc
INNER JOIN ‘.FDB::table(‘share_goods_index’).’ AS sgi ON sgi.share_id = uc.share_id AND sgi.share_id <> ‘.$share_id.’
WHERE uc.c_uid IN (‘.implode(‘,’,$uids).’) GROUP BY sgi.uid LIMIT 0,’.$num);
while($data = FDB::fetch($res))
{
$share_ids = explode(‘,’,$data['share_ids']);
$share_ids[] = (int)current($share_ids);
}
$share_ids = array_unique($share_ids); //源代码中,只是过滤掉了数组中的重复值
$share_ids = array_filter($share_ids); //这句代码是我后来添加的,过滤掉了数组中的空值,这样程序就可以正常执行了
if(count($share_ids) > 0)
{
$list = FDB::fetchAll(‘SELECT share_id,uid,content,collect_count,comment_count,create_time,cache_data FROM ‘.FDB::table(‘share’).’ WHERE share_id IN (‘.implode(‘,’,$share_ids).’) LIMIT 0,’.$num);
$list = ShareService::getShareDetailList($list);
}
不管这个问题是不是客户由于操作数据库失误导致的,我想都应该对查询得到的数据数组,进行空值过滤。
新闻热点
疑难解答