Использование подключения к MySQL в классе php

73
22 сентября 2019, 23:30

возник такой вопрос, у меня есть вот такой класс

 <?php
class db {
    protected $connection;
    protected $query;
    public $query_count = 0;
    public function __construct($dbhost = 'localhost', $dbuser = 'root', $dbpass = '', $dbname = '', $charset = 'utf8') {
        $this->connection = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
        if ($this->connection->connect_error) {
            die('Failed to connect to MySQL - ' . $this->connection->connect_error);
        }
        $this->connection->set_charset($charset);
    }
    public function query($query) {
        if ($this->query = $this->connection->prepare($query)) {
            if (func_num_args() > 1) {
                $x = func_get_args();
                $args = array_slice($x, 1);
                $types = '';
                $args_ref = array();
                foreach ($args as $k => &$arg) {
                    if (is_array($args[$k])) {
                        foreach ($args[$k] as $j => &$a) {
                            $types .= $this->_gettype($args[$k][$j]);
                            $args_ref[] = &$a;
                        }
                    } else {
                        $types .= $this->_gettype($args[$k]);
                        $args_ref[] = &$arg;
                    }
                }
                array_unshift($args_ref, $types);
                call_user_func_array(array($this->query, 'bind_param'), $args_ref);
            }
            $this->query->execute();
            if ($this->query->errno) {
                die('Unable to process MySQL query (check your params) - ' . $this->query->error);
            }
            $this->query_count++;
        } else {
            die('Unable to prepare statement (check your syntax) - ' . $this->query->error);
        }
        return $this;
    }
    public function fetchAll() {
        $params = array();
        $meta = $this->query->result_metadata();
        while ($field = $meta->fetch_field()) {
            $params[] = &$row[$field->name];
        }
        call_user_func_array(array($this->query, 'bind_result'), $params);
        $result = array();
        while ($this->query->fetch()) {
            $r = array();
            foreach ($row as $key => $val) {
                $r[$key] = $val;
            }
            $result[] = $r;
        }
        $this->query->close();
        return $result;
    }
    public function fetchArray() {
        $params = array();
        $meta = $this->query->result_metadata();
        while ($field = $meta->fetch_field()) {
            $params[] = &$row[$field->name];
        }
        call_user_func_array(array($this->query, 'bind_result'), $params);
        $result = array();
        while ($this->query->fetch()) {
            foreach ($row as $key => $val) {
                $result[$key] = $val;
            }
        }
        $this->query->close();
        return $result;
    }
    public function numRows() {
        $this->query->store_result();
        return $this->query->num_rows;
    }
    public function close() {
        return $this->connection->close();
    }
    public function affectedRows() {
        return $this->query->affected_rows;
    }
    private function _gettype($var) {
        if(is_string($var)) return 's';
        if(is_float($var)) return 'd';
        if(is_int($var)) return 'i';
        return 'b';
    }
}
?>

Он находится в db.php Сейчас я создаю новый класс в controller.php. Как использовать подключение к бд в моем новом классе для работы с бд в методах?

Answer 1

Через конструктор

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

Самое главное - не создавать новое подключение каждый раз. Поскольку это попросту убьет сервер БД. Каждый РНР скрипт должен подключаться к одной и той де БД ровно 1 раз.

Для более продвинутых практик можно почитать вот этот ответ: Как правильно подключиться к базе данных в шаблоне MVC

READ ALSO
Где брать Задачи для опыта? [закрыт]

Где брать Задачи для опыта? [закрыт]

Где можно брать задачи (задания) для получения опыта? Допустим, для того же phpНу и не только

112
преобразовать Nested Set

преобразовать Nested Set

я через api получаю json который декодирую в массив, этот массив содержит дерево категорий в формате nested set перед тем как записать в базу нужно...

93
Поиск всех значений в массиве по совпадению без цикла

Поиск всех значений в массиве по совпадению без цикла

Есть ассоциативный массив нужно выбрать конкретные значения по совпадению и хотелось бы сделать все это без цикла, так как массивы могут...

83