there was such a question, I have such a class

<?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'; } } ?> 

It is in db.php. Now I am creating a new class in controller.php. How to use the connection to the database in my new class to work with the database in the methods?

  • In addition to the outdated methods of working with mysqli (for example, for a long time there is a get_result () and mysqli_fetch_all) this class has other serious problems. I recommend reading, Your first database wrapper's childhood diseases - Ipatyev

1 answer 1

Through the constructor

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

The most important thing is not to create a new connection every time. Because it will simply kill the database server. Each PHP script must connect to the same database and exactly one time.

For more advanced practices, you can read this answer: How to connect to the database in the MVC template correctly