You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.9 KiB

  1. <?php
  2. /**
  3. * Класс базы данных.
  4. * Возвращает идентификатор соединения
  5. *
  6. * @copyright
  7. * @link
  8. * @package Majestic
  9. * @subpackage DB
  10. * @since
  11. * @version SVN: $Id$
  12. * @filesource $URL$
  13. */
  14. class DBConnector
  15. {
  16. private $handlers = array();
  17. static private $instance = null;
  18. static public $queries = array();
  19. /**
  20. * Запрещаем new и клонирование
  21. */
  22. private function __construct(){}
  23. private function __clone(){}
  24. /**
  25. * Единственный способ инициализации. Singletone как-никак.
  26. * @return DBConnector
  27. */
  28. static public function getInstance()
  29. {
  30. if (self::$instance == null) {
  31. self::$instance = new DBConnector();
  32. }
  33. return self::$instance;
  34. }
  35. /**
  36. * Получение соединения.
  37. * Если соединение с такими параметрами уже есть - новое не создается.
  38. *
  39. * @param array $db_settings - массив настроек
  40. * @return resource - идентификатор соединения
  41. */
  42. public function getConnect($db_settings)
  43. {
  44. $handler_name = $this->getConnectionName($db_settings);
  45. if (isset($this->handlers[$handler_name])) {
  46. return $this->handlers[$handler_name];
  47. }
  48. if (!$handler = mysqli_connect($db_settings['host'], $db_settings['user'], $db_settings['password'], $db_settings['database'])) {
  49. throw new MJException('Can\'t connect to DB '.mysqli_connect_error(), 2);
  50. }
  51. mysqli_query($handler, "SET NAMES 'utf8'"); //cheat!!!
  52. return $this->handlers[$handler_name] = $handler;
  53. }
  54. protected function getConnectionName($db_settings)
  55. {
  56. return $db_settings['host'] . '-' . $db_settings['database'];
  57. }
  58. }
  59. ?>