core db.class.php

расширенный класс для работы с базой данных

#1 27 февраля 2012 в 02:47
расширенный класс для работы с базой данных. может быть применен при разработке модулей и компонентов.

  1. <?php
  2. /**
  3.  * MYSUBD_SQL INSTANT CMS Database php FrameWork [alexpac26@yandex.ru]
  4.  *
  5.  * InstantCMS v1.9
  6.  * http://instantcms.ru/
  7.  * produced by InstantSoft, (www.instantsoft.ru)
  8.  *
  9.  * @copyright LICENSED BY GNU/GPL v2
  10.  * @since PHP 5
  11.  *
  12.  */
  13.  
  14. class cmsDatabase {
  15.  
  16. private static $instance;
  17.  
  18. public $q_count = 0;
  19. public $q_dump = '';
  20.  
  21. public $db_link;
  22.  
  23. /**
  24. * Фукция вывода отчета от ошибке.
  25.  * Запускается при обнаружении ошибок в соединении с базой.
  26.  * Аварийно завершает все вызовы на сайте через exit;
  27. *
  28. * @return null
  29. */
  30. static function show_Error($er = '') { // отчет об ошибке
  31. echo '<body bgcolor="#FAEBD7"><center><font color=blue size=+2><b>Проблема с базой данных, технические неполадки, зайдите позже</b></font></center><hr>';
  32. echo mysql_error().' | '.$er;
  33. echo '<hr>MYSUBD_SQL INSTANT CMS Database php FrameWork';
  34. }
  35.  
  36.  
  37. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  38. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  39. private function __construct(){
  40. $inConf = cmsConfig::getInstance();
  41.  
  42. $this->db_link = mysql_connect($inConf->db_host, $inConf->db_user, $inConf->db_pass) or self::show_Error('Cannot connect to MySQL server');
  43.  
  44. mysql_select_db($inConf->db_base, $this->db_link) or self::show_Error('Cannot select "'.$inConf->db_base.'" database');
  45.  
  46. $this->query("SET NAMES cp1251");
  47. }
  48.  
  49. /**
  50. * статический конструктор класса cmsDatabase
  51. *
  52. * @return cmsDatabase
  53. */
  54. public static function getInstance() {
  55. if (self::$instance === null) {
  56. self::$instance = new self;
  57. }
  58. return self::$instance;
  59. }
  60.  
  61. /**
  62. * Функция автоматической замены префикса в запросах
  63. *
  64. * @param string $sql текст запроса
  65. * @param string $prefix префикс запроса
  66. * @return string
  67. */
  68. protected function replacePrefix( $sql, $prefix='cms_' ) {
  69.  
  70. /*$inConf = cmsConfig::getInstance();
  71.  
  72.   $sql = trim(str_replace($prefix, $inConf->db_prefix.'_', $sql));
  73.  
  74.   return $sql;*/
  75. if ((preg_match('/(select)(.+)(where)(.+)$/ims',$sql,$s))||
  76. (preg_match('/(update)(.+)(set)(.+)$/ims',$sql,$s))||
  77. (preg_match('/(insert)(.+)(values)(.+)$/ims',$sql,$s))||
  78. (preg_match('/(delete)(.+)(where)(.+)$/ims',$sql,$s))) {
  79. $s[2] = str_replace($prefix, cmsConfig::getInstance()->db_prefix.'_', $s[2]);
  80. return $s[1].$s[2].$s[3].$s[4];
  81. } else {
  82. return str_replace($prefix, cmsConfig::getInstance()->db_prefix.'_', $sql);
  83. }
  84. }
  85.  
  86.  
  87. /**
  88. * Функция выполняет действия mysql_query
  89.  *
  90. * @param string $sql текст запроса
  91. * @param boolean $ignore_errors режим показа ошибок
  92. *
  93. * @return mysql_result
  94. */
  95. public function query($sql, $ignore_errors=false){
  96. $inConf = cmsConfig::getInstance();
  97. $sql = $this->replacePrefix($sql);
  98. $result = mysql_query($sql, $this->db_link);
  99.  
  100. if ($inConf->debug){
  101. $this->q_count += 1;
  102. $this->q_dump .= '<pre>'.$sql.'</pre><hr/>';
  103. }
  104.  
  105. if (mysql_error() && $inConf->debug && !$ignore_errors){
  106. self::show_Error('<b>QUERY ERROR</b>: '.$sql);
  107. }
  108.  
  109. return $result;
  110. }
  111.  
  112. /**
  113. * Функция выполняет действия mysql_num_rows
  114.  *
  115. * @param mysql_result $result
  116.  *
  117. * @return int
  118. */
  119. public function num_rows($result){
  120. return (int)mysql_num_rows($result);
  121. }
  122.  
  123. /**
  124. * Функция выполняет действия mysql_fetch_assoc
  125.  * по окончании чтения делает сброс указателя для возможности повторного чтения данных запроса
  126.  *
  127. * @param mysql_result $result
  128.  *
  129. * @return array
  130. */
  131. public function fetch_assoc($result){
  132. //return mysql_fetch_assoc($result);
  133.  
  134. if ($res = mysql_fetch_assoc($result)) {
  135. return $res;
  136. } else {
  137. mysql_data_seek($result,0);
  138. return false;
  139. }
  140. }
  141.  
  142. /**
  143. * Функция выполняет действия mysql_fetch_row
  144.  *
  145. * @param mysql_result $result
  146.  *
  147. * @return array
  148. */
  149. public function fetch_row($result){
  150. return mysql_fetch_row($result);
  151. }
  152.  
  153. /**
  154. * Функция выполняет действия mysql_affected_rows
  155.  *
  156. * @return int
  157. */
  158. public function affected_rows(){
  159. return mysql_affected_rows($this->db_link);
  160. }
  161.  
  162. /**
  163. * Функция возвращает последний вставленный ID
  164.  *
  165. * @param string $table имя таблицы
  166.  *
  167. * @return int
  168. */
  169. public function get_last_id($table){
  170. if ($res = $this->read_one("SELECT LAST_INSERT_ID() as lastid FROM $table LIMIT 1")) {
  171. return $res;
  172. } else {
  173. return 0;
  174. }
  175. }
  176.  
  177.  
  178.  
  179. /**
  180. * Функция возвращает количество строк запроса
  181.  *
  182. * @param string $table имя таблицы
  183. * @param string $where SQL условие
  184. * @param string $limit SQL предел (LIMIT)
  185.  *
  186. * @return int
  187. */
  188. public function rows_count($table, $where, $limit=0){
  189. $sql = "SELECT COUNT(*) FROM $table WHERE $where";
  190. if ($limit) { $sql .= " LIMIT ".$limit; }
  191. return $this->read_one($sql);
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.