Обращение к БД из log.php

Тема в разделе "Общие вопросы", создана пользователем iron-zorin, 21 авг 2024.

  1. iron-zorin

    iron-zorin Пользователь

    Сообщения:
    50
    Симпатии:
    1
    Хочу сделать аналог функции $this->log->write, который будет писать в базу отчёты о завершении заданий по крону
    Добавил в system\library\log.php

    public function write_sql() {
    $sql = " простейший UPDATE, проверял - работает";
    $query = $this->db->query($sql);
    }

    Ругается на

    SyntaxError: Unexpected token '<', "<br />
    <b>"… is not valid JSON
    parsererror
    <br />
    <b>Fatal error</b>: Call to a member function query() on null in <b>/ home/.../system/library/log.php </b> on line <b>37</b><br />


    Притом рядом лежит файл system\library\openbay.php - в котором та же самая конструкция $query = $this->db->query используется много раз
     
  2. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    907
    Симпатии:
    126
    Здравствуйте

    В классе Log попросту нет поддержки db, вам нужно либо передавать db через параметры, либо как-то иначе создавать
     
    iron-zorin нравится это.
  3. iron-zorin

    iron-zorin Пользователь

    Сообщения:
    50
    Симпатии:
    1
    Я в ООП ноль
    Поддержка дополнительных функций добавляется же при создании класса?
    В system\library\openbay.php не нашёл ничего похожего на db

    final class Openbay {
    private $registry;
    private $installed_modules = array();
    public $installed_markets = array();

    public function __construct($registry) {
    $this->registry = $registry;

    $this->getInstalled();

    foreach ($this->installed_markets as $market) {
    $class = '\openbay\\'. ucfirst($market);

    $this->{$market} = new $class($registry);
    }

    $this->logger = new \Log('openbay.log');
    }

    public function __get($name) {
    return $this->registry->get($name);
    }


    ...

    private function getInstalled() {
    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "extension WHERE `type` = 'openbay'");

    foreach ($query->rows as $result) {
    $this->installed_markets[] = $result['code'];
    }
    }

    Где db подключается?
     
  4. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    907
    Симпатии:
    126
    final class Openbay {
    private $registry;
    private $installed_modules = array();
    public $installed_markets = array();

    public function __construct($registry) {
    $this->registry = $registry;


    $this->getInstalled();

    foreach ($this->installed_markets as $market) {
    $class = '\openbay\\'. ucfirst($market);

    $this->{$market} = new $class($registry);
    }

    $this->logger = new \Log('openbay.log');
    }

    public function __get($name) {
    return $this->registry->get($name);
    }


    ...

    private function getInstalled() {
    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "extension WHERE `type` = 'openbay'");

    foreach ($query->rows as $result) {
    $this->installed_markets[] = $result['code'];
    }
    }
     
  5. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    907
    Симпатии:
    126
    Говорю же, сделайте проще из исходного места передавайте в функцию параметр $db