【问题标题】:Open Cart - PHP Fatal error: Call to undefined method mysqli::escape() in /home/l/beta4/system/library/db.php on line 24打开购物车 - PHP 致命错误:在第 24 行调用 /home/l/beta4/system/library/db.php 中未定义的方法 mysqli::escape()
【发布时间】:2017-02-21 12:07:25
【问题描述】:

我更改了我的域和主机,并将所有代码从第一个主机移动到另一个带有数据库的主机。现在,我在 open-cart 1.5.6 中遇到错误

PHP 致命错误:在第 24 行调用 /home/l/beta4/system/library/db.php 中未定义的方法 mysqli::escape()

我的主机是 Godaddy。

这是我的 db.php 代码

<?php
class DB {
 private $driver;

 public function __construct($driver, $hostname, $username, $password, $database) {
  $file = DIR_DATABASE . $driver . '.php';

  if (file_exists($file)) {
   require_once($file);

   $class = 'DB' . $driver;

   $this->driver = new $driver($hostname, $username, $password, $database);
  } else {
   exit('Error: Could not load database driver type ' . $driver . '!');
  }
 }

 public function query($sql) {
  return $this->driver->query($sql);
 }

 public function escape($value) {
  return $this->driver->escape($value);
 }

 public function countAffected() {
  return $this->driver->countAffected();
 }

 public function getLastId() {
  return $this->driver->getLastId();
 }
}
?>

第24行代码是

公共函数转义($value){返回 $this->driver->escape($value); }

【问题讨论】:

  • 我编辑了我的问题
  • 根据php.net/manual/en/book.mysqli.php的说法,mysqli没有提供一个叫做“escape”的函数。不过,real_escape_string 可以完成这项工作。

标签: php mysql mysqli opencart


【解决方案1】:

Open Cart 1.5.6 好像真的不支持 mysqli? 不确定。

我使用 MySQLiz 模块来解决这个问题:
https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=13041

【讨论】:

  • 这是因为您使用的是几年前的 opencart 版本,而这些功能适用于更旧版本的 php(即:php 5.2)。如果您想让您的商店符合标准,您可能需要考虑安全方面或更新范围内的事情。该扩展所做的只是作为一些较新版本的 PHP 的变通方法,以使其正常工作(自从一年多前的最后一次更新以来,它似乎只达到了 5.5)。您目前使用的 PHP 版本是什么?
【解决方案2】:

您要么更新了 Opencart,要么更改了数据库驱动程序,要么同时更改了两者。您应该确保在问题中包含类似的详细信息。

DB 类在 1.5.6 中有一个错误 - 更改如下行:

$this->driver = new $driver($hostname, $username, $password, $database);

$this->driver = new $class($hostname, $username, $password, $database);

另外,您应该将mysqli驱动程序system/database/mysqli.php替换为1.5.6.4以后的版本,可以在here或之后下载:

$this->link->set_charset("utf8");

添加

$this->link->query("SET SQL_MODE = ''");

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 2016-03-06
    相关资源
    最近更新 更多