Просмотр файла app/classes/DB.php

Размер файла: 2.71Kb
  1. <?php
  2. // ---------------------------- Класс для работы с базами данных -------------------------------//
  3. class PDO_ extends PDO {
  4. static $counter = 0;
  5.  
  6. function __construct($dsn, $username, $password) {
  7. parent::__construct($dsn, $username, $password);
  8. $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  9. $this->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  10. $this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
  11. }
  12.  
  13. function prepare($sql, $params = []) {
  14. $stmt = parent::prepare($sql, [
  15. PDO::ATTR_STATEMENT_CLASS => ['PDOStatement_']
  16. ]);
  17. return $stmt;
  18. }
  19.  
  20. function query($sql, $params = []) {
  21. self::$counter++;
  22. $stmt = $this->prepare($sql);
  23. $stmt->execute($params);
  24. return $stmt;
  25. }
  26.  
  27. function querySingle($sql, $params = []) {
  28. $stmt = $this->query($sql, $params);
  29. return $stmt->fetchColumn(0);
  30. }
  31.  
  32. function queryFetch($sql, $params = []) {
  33. $stmt = $this->query($sql, $params);
  34. return $stmt->fetch();
  35. }
  36.  
  37. function queryCounter() {
  38. return self::$counter;
  39. }
  40. }
  41. // ----------------------------------------------------//
  42. class PDOStatement_ extends PDOStatement {
  43. function execute($params = []) {
  44. if (func_num_args() == 1) {
  45. $params = func_get_arg(0);
  46. } else {
  47. $params = func_get_args();
  48. }
  49. if (! is_array($params)) {
  50. $params = [$params];
  51. }
  52. parent::execute($params);
  53. return $this;
  54. }
  55.  
  56. function fetchSingle() {
  57. return $this->fetchColumn(0);
  58. }
  59.  
  60. function fetchAssoc() {
  61. $this->setFetchMode(PDO::FETCH_NUM);
  62. $data = [];
  63. while ($row = $this->fetch()) {
  64. $data[$row[0]] = $row[1];
  65. }
  66. return $data;
  67. }
  68. }
  69.  
  70. // --------------- Класс singleton для подключения к БД -----------------//
  71. class DB {
  72. private static $instance;
  73. private function __construct() {}
  74. private function __clone() {}
  75.  
  76. public static function run() {
  77.  
  78. if (! isset(self::$instance)) {
  79.  
  80. try {
  81. self::$instance = new PDO_('mysql:host='.env('DB_HOST').';port='.env('DB_PORT').';dbname='.env('DB_DATABASE'), env('DB_USERNAME'), env('DB_PASSWORD'));
  82. self::$instance->exec('SET NAMES utf8mb4');
  83. self::$instance->exec('SET CHARACTER SET utf8');
  84. }
  85.  
  86. catch (PDOException $e) {
  87. die('Connection failed: '.$e->getMessage());
  88. }
  89. }
  90. return self::$instance;
  91. }
  92.  
  93. final public function __destruct() {
  94. self::$instance = null;
  95. }
  96. }