Несколько подключений к базе данных с использованием мультитона или любого шаблона проектирования
У меня есть следующий код для нескольких подключений к базе данных. Это не хороший дизайн. Все статично. Но не знаю, как это улучшить. Я могу добавить больше функций, таких как подготовить запрос, но в настоящее время я хочу хороший / чистый дизайн. Я попытался сделать многотонный дизайн шаблона. Требования следующие: сначала я подключусь к 1 базе данных, затем получу сведения о базе данных всех других клиентов MySQL, затем зациклюсь и соединюсь с каждой базой данных и что-то сделаю. Итак, мне нужно несколько соединений.
<?php
class db_class{
private static $instance = array();
private function __construct(){ }
public static function get_instance($type , $db_detail_array=array()){
$host = $db_detail_array['host'];
$username = $db_detail_array['username'];
$database = $db_detail_array['database'];
$password = $db_detail_array['password'];
if(empty($host) or empty($username) or empty($database) or empty($password)){
return;
}
if(empty(self::$instance[$type])) {
self::$instance[$type] = new mysqli($host, $username, $password, $database);
if (@self::$instance[$type]->connect_errno) {
echo self::$last_err = "Connect failed";
}
}
}
static function fetch_assoc($query,$type){
$db_query = self::run_query($query,$type);
$rows = array();
while($row = @$db_query->fetch_assoc()){
$rows[] = $row;
}
$db_query->free();
return($rows);
}
static function escape($type,$value){
$value = self::$instance[$type]->real_escape_string($value);
return($value);
}
static function run_query($query,$type){
self::$instance[$type]->ping();
$db_query = self::$instance[$type]->query($query);
if(self::$instance[$type]->error){
echo self::$last_err = self::$instance[$type]->error;echo "<p>$query, $type</p>";
return;
}
return($db_query) ;
}
static function num_rows($query,$type){
$db_query = self::run_query($query,$type);
$num_rows = $db_query->num_rows;
return($num_rows);
}
static function disconnect($type){
@self::$db_obj[$type]->close();
}
}
?>
1 ответ
Пожалуйста, посмотрите на PDO.
Это объединяющий объект базы данных, демонстрирующий общий и эффективный интерфейс.
Он также поддерживает типы серверов, отличные от mysql.
Даже использование этого явно будет удовлетворительным.