【问题标题】:OpenCart Category and Product View blank in FrontendOpenCart 类别和产品视图在前端空白
【发布时间】:2013-03-13 18:54:10
【问题描述】:

我“继承”了 OpenCart 1.5.2.1 的现有有效安装。

为了测试目的,我想在我的本地服务器上建立一个开发站点。所以我在本地安装并复制了数据库。

我可以毫无问题地登录后端 - 商店已设置,所有产品和类别也都在那里。

在前端,我可以访问商店的主页,并且类别列表正确显示,包括每个类别的产品数量。

但是,当我尝试查看类别列表或单个产品时,我得到一个空白页。

我没有收到 PHP 错误 - 我已附加

display_errors = 1;
error_reporting = E_ALL;
log_errors = 1;

到购物车根文件夹中的 php.ini。

从 OpenCart 错误日志中,我收到以下错误消息:

2013-03-13 18:51:15 - PHP Notice:  Error: Column 'product_id' cannot be null<br />Error No: 1048<br />SELECT DISTINCT *, p [...] AND p2s.store_id = '5' in /path/to/root/system/database/mysql.php on line 49

知道如何解决这个问题吗?

** 更新:**

完整的查询是:

SELECT DISTINCT *, pd.name, pd.creator, pd.keyword, pd.circa, pd.year, pd.century, pd.decade, pd.scenelocation, pd.fm_quicksearch AS fm_quicksearch, p.image, m.name AS manufacturer, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '8' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '8' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '8') AS reward, (SELECT ss.name FROM stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '1') AS stock_status, (SELECT wcd.unit FROM weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '1') AS weight_class, (SELECT lcd.unit FROM length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '1') AS length_class, (select (r.sum + p.rat)/(r.tot + p.tot) from (select COALESCE(j.sum,0) as sum , COALESCE(j.tot,0) as tot from (select SUM(rating) as sum , COUNT(rating) as tot, product_id from rating where product_id = '9206' group by product_id) j right join product on product.product_id = j.product_id where product.product_id = '9206') r, (select product_id, COALESCE(rating,0) as rat, count(rating) as tot from product where product_id = '9206' and rating > 0) p ) AS rating, p.sort_order FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '9206' AND pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '5'

更新

我怀疑这与 MySQL 或 PHP 配置有关。因为当我在实时站点上运行相同的查询时,它不会失败。

更新

问题与我的本地 MySQL 安装有关。使用在线数据库时一切正常。 OpenCart 论坛中的某个人 - Link to Post 指出以下内容:

此错误源于对特定贡献的插入查询>未经测试尝试添加自动递增字段将拒绝的空语句>尤其是从 mySQL 5.1+ 开始。这种来自 mySQL 开发人员的方法在 > 多年前就被阻止了。

与作者联系以解决此问题,说明自动递增字段不需要 > 需要在查询中解决,因为它已经与执行的查询一起 > 自动创建递增值。

可能是这样的。查询本身不是插入,但很可能与此有关。我会进一步调查此事。

【问题讨论】:

    标签: opencart


    【解决方案1】:

    在“系统”>“设置”>“服务器”选项卡中将“输出压缩级别”设置为 0。 然后在 php.ini 文件中 display_errors = 1; error_reporting = E_ALL; log_errors = 1;

    所以问题出在 'product_id' 上。在页面控制器页面中检查产品 ID(只需回显它)。然后检查模型查询。问题只是产品 ID。

    【讨论】:

    • 错误报告已设置为这些值。基本上,导致错误的 SQL 查询位于 catalog/model/catalog/product.php 中的 getProduct($product_id) 函数中。我们确实正确地传递了一个产品 _id,但它会引发错误。我已经更新了原始问题以包含完整的 SQL 查询。令我困惑的是,商店的现场网站运行良好,但开发网站出现此错误。
    【解决方案2】:

    是的,答案确实与我的本地 MySQL 安装有关。我把它移到另一台服务器上,它工作得很好。谢谢你的反馈!很抱歉没有比这更具体的答案。我只是想用这篇文章结束一个松散的结局。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多