【问题标题】:Prestashop - Member function executeS() on a non-objectPrestashop - 非对象上的成员函数 executeS()
【发布时间】:2016-03-13 09:29:07
【问题描述】:

我有一个 prestashop 网站。我正在使用一个模块进行 xml 导出,以前它是完美的,但是我移动了新服务器并安装了 nginx + php-fqm,但我尝试制作新的 xml 导出的东西却不少人给出错误

致命错误:在第 75 行的 /modules/prestacenterxmlexportpro/classes/PcXmlProService.php 中的非对象上调用成员函数 executeS()

75.那一行在getList函数里面,就是getlist函数

public static function getList()
{
    $query = new DbQuery;
    $sql = $query
        ->select('`'.self::$definition['primary'].'` id')
        ->select('`name`')
        ->from(self::$definition['table'])
        ->orderBy('id')
        ->build();
     return self::$db->executeS($sql);
}
  1. 行是return self::$db->e​​xecuteS($sql);

Nginx 错误日志是 016/03/13 11:15:53 [错误] 1034#0: *107886 FastCGI 在标准错误中发送:“PHP 消息:PHP 致命错误:在 /modules/prestacenterxmlexportpro 中的非对象上调用成员函数 executeS() /classes/PcXmlProService.php on line 75" 同时从上游读取响应标头,客户端:127.0.0.1,服务器:www.mywebpage.com,请求:“GET /adminroutee12321/index.php?controller=PcXmlPro&addpc_xmlpro_feed&token=b7e61f451c9a702701c2cd0c10174a3a HTTP/1.1 ", 上游: "fastcgi://unix:/var/run/php5-fpm.sock:", 主机: "www.mywebpage.com"

【问题讨论】:

    标签: php nginx pdo prestashop prestashop-1.6


    【解决方案1】:

    您不应该使用self::$db,这是一种陈旧且糟糕的做法,已被废弃,甚至可能在较新版本的 PrestaShop 中不可用。

    相反,您应该使用Db::getInstance()->executeS

    另外,self::$db 仅在 ObjectModel 类或扩展它的类中可用。我无法从您的错误中得知该类是否扩展了 ObjectModel

    self::$db 可能不起作用的另一个原因是因为您正在使用 public static function,这意味着静态调用方法 get,这意味着未调用 __construct 函数,这将初始化 self::$db = Db::getInstance()

    【讨论】:

    • 谢谢你的回答,扩展类是ObjectModel。当我这样使用时,返回 self::$db = Db::getInstance($sql);不再工作错误但没有得到列表:/
    • 但你是天才 :) 我解决了问题,非常感谢你,我把它改成这样 self::$db = Db::getInstance(); return self::$db->e​​xecuteS($sql);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2012-04-20
    • 2015-05-01
    相关资源
    最近更新 更多