Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] Драйвер базы данных mysqli. Синтаксическая ошибка скрипта mysqli.php


galik

Recommended Posts

Версия магазина: ocStore v1.5.5.2

Без изменений

Обновление с OpenCart 1.5.6.1

 

Синтаксическая ошибка в модуле драйвера БД mysqli.php

Местоположение: <root ocStore directory>/system/database/mysqi.php

 

После исправления ошибки в лоб оказалось, что класс драйвера БД назван аналогично нативному классу mysqli, что запрещено делать в PHP.

Пришлось переименовать класс драйвера, на пример как в OpenCart классы драйверов имеют префикс DB

то есть было:

class MySql {
...
}

стало:

class DBMySql {
...
}

ну и пришлось переименовать классы других драйверов с префиксом DB, они все расположены в одном каталоге.

 

Кроме того чтоб драйверы корректно подгружались переписал модуль диспетчера БД:

<root ocStore directory>/system/library/db.php

привожу код полностью:

<?php
class DB {
  private $driver;
	
  public function __construct($driver, $hostname, $username, $password, $database) {
    if (file_exists(DIR_DATABASE . $driver . '.php')) {
      require_once(DIR_DATABASE . $driver . '.php');
    } else {
      exit('Error: Could not load database file ' . $driver . '!');
    }
    $classdriver = 'DB' . $driver;
    $this->driver = new $classdriver($hostname, $username, $password, $database);
  }
		
  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();
  }	
}

после этого заработало как должно.

 

Исправьте плиз, дистрибутив ocStore, а то этот баг в нескольких версиях присутствует. Похоже все сидят на устаревшем драйвере mysql, а там этого бага нет.

 

И еще, драйвер выбирается в конфигах : config.php и admin/config.php

define('DB_DRIVER', 'mysqli');

PS

при выборе драйвера mysql у меня появляется Notice:

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in .../www/store/system/database/mysql.php on line 6

 

- устарел mysql_connect() и в будущем он может быть удален, используйте вместо этого mysqli или PDO.

 

PPS:

pdo.php модуль вообще пустой, не реализован в ocStore 1.5.5.2

  • +1 1
Надіслати
Поділитися на інших сайтах


  • 5 months later...
  • 7 months later...
  • 6 months later...

Всё отлично работает, возьмите файлы из opencart 1.5.6.4 /system/library/db.php и /system/database/mysqli.php + правка config.php с mysql на mysqli.

а где же его взять, если в дитрибутиве конфиг еще пустой до установки

Надіслати
Поділитися на інших сайтах


Гість
Ця тема закрита для публікації повідомлень.
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.