Просмотр файла engine/classes/mysqli.class.php

Размер файла: 3.32Kb
  1. <?php
  2.  
  3. /**
  4. * @author Tadochi
  5. */
  6.  
  7. class sql
  8. {
  9. public $queries = 0;
  10. public $db;
  11. public $error;
  12. public $result = null; // Результат последнего запроса
  13. public $timer;
  14. public $operation;
  15. function __construct($set)
  16. {
  17. $time_before = microtime(1);
  18. $this->db = mysqli_connect($set['mysql_host'], $set['mysql_user'], $set['mysql_pass'], $set['mysql_db_name']);
  19. mysqli_set_charset($this->db, 'utf8');//mysqli_query($this->db, 'SET NAMES utf8');
  20. $this->timer += microtime(1) - $time_before;
  21. return $this->db;
  22. }
  23.  
  24. function __destruct()
  25. {
  26. $this->free();
  27. mysqli_close($this->db);
  28. }
  29. public function table_exists($table)
  30. {
  31. return $this->query("SHOW TABLES LIKE '$table'")->result();
  32. }
  33. public function free($multi = false)
  34. {
  35. if ($multi)
  36. {
  37. do
  38. {
  39. if (!mysqli_more_results($this->db))
  40. break;
  41.  
  42. if ($result = mysqli_store_result($this->db))
  43. {
  44. mysqli_free_result($result);
  45. }
  46. }
  47. while (mysqli_next_result($this->db));
  48. }
  49.  
  50. if (!empty($this->result) && !is_bool($this->result))
  51. mysqli_free_result($this->result);
  52. $this->result = null;
  53. }
  54.  
  55. public function num_rows($query = false)
  56. {
  57. return mysqli_affected_rows($this->db);
  58. }
  59.  
  60. public function result($query = false)
  61. {
  62. if (!$query)
  63. $query = $this->result;
  64. $result = mysqli_fetch_row($query);
  65. return $result[0];
  66. }
  67. public function fetch($query = false)
  68. {
  69. if (!$query)
  70. $query = $this->result;
  71. return mysqli_fetch_assoc($query);
  72. }
  73.  
  74. public function from_file($file)
  75. {
  76. if (file_exists($file))
  77. return $this->multi(file_get_contents($file));
  78. }
  79.  
  80. public function multi($query)
  81. {
  82. $time_before = microtime(1);
  83. $this->result = mysqli_multi_query($this->db, $query);
  84. $this->queries += substr_count($query, ';');
  85. $this->timer += microtime(1) - $time_before;
  86. $this->error = mysqli_error($this->db);
  87. return $this->result;
  88. }
  89. public function query($query, $free = false)
  90. {global $arr; $arr[$this->queries]=$query;
  91. $time_before = microtime(1);
  92. $result = mysqli_query($this->db, $query);
  93. $this->timer += microtime(1) - $time_before;
  94. $this->error = mysqli_error($this->db);
  95.  
  96. if ($free)
  97. mysqli_free_result($result);
  98. else
  99. $this->result = $result;
  100.  
  101. if (!empty($this->error))
  102. {
  103. mysqli_query($this->db, "
  104. INSERT INTO `errors`
  105. (`user`, `time`, `user_agent`, `ip`, `desc`, `type`, `url`) VALUES
  106. ('".Core::$user_id."', '".time()."', '".my_esc($_SERVER['HTTP_USER_AGENT'], true)."', '".my_esc($_SERVER['REMOTE_ADDR'], true)."', '".my_esc($this->error)."', 'mysql', '".my_esc($_SERVER['REQUEST_URI'], true)."');");
  107. $this->queries++;
  108. $this->error = null;
  109. }
  110. else
  111. $this->queries++;
  112.  
  113. return $this;
  114. }
  115. }
  116. return new sql($set);