网站使用的是Prestashop 1.5.6 ,运营一段时间,在左侧畅销产品(Best Sellers)模块显示出了畅销产品,但是访问畅销产品(Best Sellers)页面,显示为“No top sellers for the moment.”。
查看和调试代码,发现是Prestashop 1.5.6 的代码漏洞导致的。
访问文件 classes/ProductSale.php,输出 89行的$ids($ids = count($ids) > 0 ? implode(‘,’, $ids) : ‘NULL';),发现输出的字符串模式如(,2,3,4,8,30,40…..),这个在 117 行SQL(AND p.`id_product` IN (‘.$ids.’))中运行肯定是存在问题的。
对比畅销产品(Best Sellers)模块代码,发现classes/ProductSale.php 82 行SQL代码存在问题。
classes/ProductSale.php 78 行至82行代码如下:
//Subquery: get product ids in a separate query to (greatly!) improve performances and RAM usage
$sql = 'SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` '.$sql_groups;
使用下面一段代码替换,主要变动是 WHERE cg.`id_group` ‘.$sql_groups.’ AND cp.`id_product` IS NOT NULL’;
//Subquery: get product ids in a separate query to (greatly!) improve performances and RAM usage
$sql = 'SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` '.$sql_groups.' AND cp.`id_product` IS NOT NULL';
修改之前记得备份文件
(责任编辑:最模板) |