Prestashop - non-object 上的成员函数 executeS()

Prestashop - Member function executeS() on a non-object

我有一个 prestashop web sites.I我使用一个模块进行 xml 导出它之前是完美的但是我移动了新服务器并安装了 nginx + php-fqm 但我尝试了很多制作新的 xml 导出错误

致命错误:在第 75

行 /modules/prestacenterxmlexportpro/classes/PcXmlProService.php 中的 non-object 上调用成员函数 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错误日志是 13 年 3 月 16 日 11:15:53 [错误] 1034#0:*107886 FastCGI 在 stderr 中发送:"PHP message: PHP Fatal error: Call to a member function executeS() on a non-object in /modules/prestacenterxmlexportpro/classes/PcXmlProService.php on line 75" 同时从上游读取响应 header,客户端: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"

您不应该使用 self::$db,这是一种古老而糟糕的做法,已经被贬低,甚至可能在新版本的 PrestaShop 中都不可用。

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

此外,self::$db 仅在扩展它的 ObjectModel classes 或 classes 中可用。我无法告诉你错误 class 是否扩展 ObjectModel.

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