Я создаю класс «DB» для mysql. Класс DB будет объединен с другими классами в моем проекте.PHP - открыть одно или несколько соединений в DB класса mysql?
index.php
$db = new DB();
$fo = new Foo($db);
print_r($db->query("SELECT * FROM tbl"));
print_r($fo->testSelect());
Foo класс
class Foo {
/**
* Constructor
* Aggregate class db object
*/
public function __construct(DB $db) {
$this->db = $db;
}
public function test() {
return $this->db->query("select * from tbl");
}
}
Мои сомнения в том, как использовать подключение к БД, чтобы наилучшим образом использовать ресурсы. В классе DB Лучше открыть соединение, когда я запускаю запросы (обновления, выбирает, ..) или открывают соединение один раз в конструкторе?
БД класс (1)
if (!class_exists('DB')) {
class DB {
private function connect() {
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT, DB_SOCKET);
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_errno . ' ' . $mysqli->connect_error);
} else {
$mysqli->set_charset(DB_CHARSET);
}
return $mysqli;
}
public function query($query) {
$db = $this->connect();
$result = $db->query($query);
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$results[] = $row;
}
$result->free();
$db->close();
return $results;
}
..insert, update, delete function..
}
}
DB класса (2)
if (!class_exists('DB')) {
class DB {
private mysqli;
public function __construct() {
$this->mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT, DB_SOCKET);
if ($this->mysqli->connect_error) {
die("Connection failed: " . $this->mysqli->connect_errno . ' ' . $this->mysqli->connect_error);
} else {
$this->mysqli->set_charset(DB_CHARSET);
}
return $this->mysqli;
}
public function query($query) {
$result = $this->mysqli->query($query);
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$results[] = $row;
}
$result->free();
return $results;
}
..insert, update, delete function..
public function __destruct() {
$this->mysqli->close();
}
}
}
Который является правильным/лучшим решением? Спасибо
Открыть соединение ОДИН – RiggsFolly