PageRenderTime 59ms CodeModel.GetById 31ms RepoModel.GetById 0ms app.codeStats 1ms

/www/cms/files/mysql.php

https://bitbucket.org/gbaitileuov/packet81
PHP | 282 lines | 219 code | 38 blank | 25 comment | 39 complexity | 8b6b689e724c562127bd3fd2c6b754f9 MD5 | raw file
  1. <?
  2. /*
  3. Title: MYSQL-DB-INTERFACE v 2.3.1 (расчудесный интерфейс по работе с базой данных mysql)
  4. Author: Derevyanko Mikhail <m-derevyanko@ya.ru>
  5. Date: 12.03.2008
  6. */
  7. class mysql{
  8. var $HOST;
  9. var $BASE;
  10. var $BASE_USER;
  11. var $BASE_USER_PASS;
  12. var $link;
  13. var $debug;
  14. var $count;
  15. function __construct($HOST='localhost', $BASE='order', $BASE_USER='root', $BASE_USER_PASS=''){
  16. $this->HOST = $HOST;
  17. $this->BASE = $BASE;
  18. $this->BASE_USER = $BASE_USER;
  19. $this->BASE_USER_PASS = $BASE_USER_PASS;
  20. $this->link = false;
  21. $this->debug = false;
  22. $this->count = 0;
  23. }
  24. function __destruct(){
  25. $this->mysql_close();
  26. }
  27. function prepare($str){
  28. if(!is_numeric($str)){
  29. $str = strtr($str, array_flip(get_html_translation_table()));
  30. $str = htmlspecialchars($str);
  31. if(!get_magic_quotes_gpc()) $str = addslashes($str);
  32. }
  33. return $str;
  34. }
  35. function mysql_connect(){
  36. if( is_resource($this->link) && mysql_ping($this->link) ) return $this->link;
  37. if( !$this->link = mysql_connect($this->HOST, $this->BASE_USER, $this->BASE_USER_PASS) ) return false;
  38. mysql_select_db($this->BASE);
  39. mysql_query("SET NAMES 'utf8'", $this->link);
  40. # Проверка логирования
  41. if (!file_exists(_CACHE_ABS_.'/logged')) $this->createLogTable();
  42. return $this->link;
  43. }
  44. function mysql_close(){
  45. if( is_resource($this->link) ) mysql_close($this->link);
  46. $this->link = false;
  47. return true;
  48. }
  49. function mysql_query($sql){
  50. if( $this->mysql_connect() ){
  51. $this->count++;
  52. if( $this->debug ) echo $sql."<br>\n";
  53. if(!$view = mysql_query($sql, $this->link)) echo mysql_error($this->link);
  54. return $view;
  55. }else return false;
  56. }
  57. function superQuery($query){
  58. $link=$this->mysql_query($query);
  59. if ($res=mysql_fetch_array($link))
  60. return $res;
  61. }
  62. function select($table, $where, $what='*'){
  63. $r = $this->mysql_query("SELECT ".$what." FROM ".$table." ".$where);
  64. $out = array();
  65. if(mysql_num_rows($r)){
  66. if(preg_match("/limit\s+1$/i", $where)){
  67. if(mysql_num_rows($r) == 1 && mysql_num_fields($r) == 1) return mysql_result($r, 0);
  68. return mysql_fetch_array($r, MYSQL_ASSOC);
  69. }
  70. if(!strstr($what, '*') && mysql_num_fields($r) == 1){
  71. $i=0;
  72. while($i<mysql_num_rows($r)){
  73. $out[]=mysql_result($r, $i++);
  74. }
  75. }else{
  76. while($o = mysql_fetch_array($r, MYSQL_ASSOC)){
  77. $out[]=$o;
  78. }
  79. }
  80. mysql_free_result($r);//странно, но пишут что функция освобождения памяти сама жрёт память. Сука засада.
  81. }
  82. return $out;
  83. }
  84. function count($table, $where="", $what='*'){
  85. return mysql_result($this->mysql_query("SELECT COUNT(".$what.") FROM ".$table." ".$where), 0);
  86. }
  87. function getFieldName($id){
  88. $link=$this->mysql_query("SELECT * FROM `fields` WHERE `id`='".$id."'");
  89. if ($res=mysql_fetch_array($link))
  90. return $res['name'];
  91. }
  92. function insert($table, $params){
  93. // ЛОГИРОВАНИЕ
  94. if (
  95. !empty($_SESSION['cms_root_auth'])
  96. && preg_match('/^class_([0-9]{1,5})$/', $table, $class_id_match)
  97. )
  98. {
  99. # ID класса объекта
  100. $class_id = $class_id_match[1];
  101. # Тип объекта
  102. $object_type = mysql_result(mysql_query("SELECT `name` FROM `classes` WHERE `id`='$class_id'"), 0, 'name');
  103. # URL в зависимости от класса объекта
  104. switch($class_id)
  105. {
  106. case 1: $url = '/'.$params['lang'].'/pages/'.$params['object_id'].'.html'; break;
  107. case 3: $url = '/'.$params['lang'].'/pages/'.$params['object_id'].'.html'; break;
  108. case 4: $url = '/'.$params['lang'].'/pages/'.mysql_result(mysql_query("SELECT `head` FROM `objects` WHERE `id`='".$params['object_id']."' LIMIT 1"), 0, 'head').'.html'; break;
  109. case 5: $url = '/'.$params['lang'].'/pages/'.mysql_result(mysql_query("SELECT `head` FROM `objects` WHERE `id`='".$params['object_id']."' LIMIT 1"), 0, 'head').'.html'; break;
  110. case 8: $url = '/'.$params['lang'].'/news/'.$params['object_id'].'/'; break;
  111. case 15: $url = '/cat.php?id='.$params['object_id'].'&lang='.$params['lang']; break;
  112. default: $url = ''; break;
  113. }
  114. # Если лога сегодня нет к этому объекту
  115. if (mysql_num_rows(mysql_query("SELECT `id` FROM `clogs` WHERE `object_id`='".$params['object_id']."' AND `day`='".date('Y-m-d')."' LIMIT 1")) == 0)
  116. {
  117. mysql_query("
  118. INSERT INTO
  119. `clogs`
  120. (`object_id`, `day`, `action`, `gmadate_ts`, `object_type`, `url`)
  121. VALUES
  122. ('".$params['object_id']."', NOW(), '1', '".time()."', '$object_type', '$url')
  123. ");
  124. }
  125. }
  126. // ЛОГИРОВАНИЕ END
  127. $str1 = array();
  128. $str2 = array();
  129. foreach($params as $name => $value){
  130. $str1[]= "`".$name."`";
  131. $str2[]= "'".$this->prepare($value)."'";
  132. }
  133. return $this->mysql_query("INSERT INTO ".$table." (".join(", ", $str1).") VALUES (".join(", ", $str2).")");
  134. }
  135. function update($table, $update, $where){
  136. // ЛОГИРОВАНИЕ
  137. if (
  138. !empty($_SESSION['cms_root_auth'])
  139. && preg_match('/^class_([0-9]{1,5})$/', $table, $class_id_match)
  140. && preg_match("/`object_id`='(\d+)'/Uis", $where, $object_id_match)
  141. && preg_match("/`lang`='(.*)'/Uis", $where, $lang_match)
  142. )
  143. {
  144. # ID класса объекта
  145. $class_id = $class_id_match[1];
  146. # Атрибуты объекта
  147. $atributes = array(
  148. 'object_id' => $object_id_match[1],
  149. 'lang' => $lang_match[1],
  150. 'object_type' => mysql_result(mysql_query("SELECT `name` FROM `classes` WHERE `id`='$class_id'"), 0, 'name')
  151. );
  152. # URL в зависимости от класса объекта
  153. switch($class_id)
  154. {
  155. case 1: $atributes['url'] = '/'.$atributes['lang'].'/pages/'.$atributes['object_id'].'.html'; break;
  156. case 3: $atributes['url'] = '/'.$atributes['lang'].'/pages/'.$atributes['object_id'].'.html'; break;
  157. case 4: $url = '/'.$params['lang'].'/pages/'.mysql_result(mysql_query("SELECT `head` FROM `objects` WHERE `id`='".$params['object_id']."' LIMIT 1"), 0, 'head').'.html'; break;
  158. case 5: $url = '/'.$params['lang'].'/pages/'.mysql_result(mysql_query("SELECT `head` FROM `objects` WHERE `id`='".$params['object_id']."' LIMIT 1"), 0, 'head').'.html'; break;
  159. case 8: $atributes['url'] = '/'.$atributes['lang'].'/news/'.$atributes['object_id'].'/'; break;
  160. case 15: $atributes['url'] = '/cat.php?id='.$atributes['object_id'].'&lang='.$atributes['lang']; break;
  161. default: $atributes['url'] = ''; break;
  162. }
  163. # Если лога сегодня нет к этому объекту
  164. if (mysql_num_rows(mysql_query("SELECT `id` FROM `clogs` WHERE `object_id`='".$atributes['object_id']."' AND `day`='".date('Y-m-d')."' LIMIT 1")) == 0)
  165. {
  166. mysql_query("
  167. INSERT INTO
  168. `clogs`
  169. (`object_id`, `day`, `action`, `gmadate_ts`, `object_type`, `url`)
  170. VALUES
  171. ('".$atributes['object_id']."', NOW(), '2', '".time()."', '".$atributes['object_type']."', '".$atributes['url']."')
  172. ");
  173. }
  174. }
  175. // ЛОГИРОВАНИЕ END
  176. $str = array();
  177. foreach($update as $name => $value){
  178. $str[]= "`".$name."`='".$this->prepare($value)."'";
  179. }
  180. return $this->mysql_query("UPDATE ".$table." SET ".join(", ", $str)." ".$where);
  181. }
  182. function delete($table, $where){
  183. // ЛОГИРОВАНИЕ
  184. if (
  185. !empty($_SESSION['cms_root_auth'])
  186. && preg_match('/^class_([0-9]{1,5})$/', $table, $class_id_match)
  187. && preg_match("/`object_id`='(\d+)'/Uis", $where, $object_id_match)
  188. )
  189. {
  190. # ID класса объекта
  191. $class_id = $class_id_match[1];
  192. # Атрибуты объекта
  193. $atributes = array(
  194. 'object_id' => $object_id_match[1],
  195. 'object_type' => mysql_result(mysql_query("SELECT `name` FROM `classes` WHERE `id`='$class_id'"), 0, 'name')
  196. );
  197. # Владелец
  198. $head = mysql_result(mysql_query("SELECT `head` FROM `objects` WHERE `id`='".$atributes['object_id']."' LIMIT 1"), 0, 'head');
  199. if ($head != 0)
  200. {
  201. switch($class_id)
  202. {
  203. case 3: $url = '/ru/pages/'.$head.'.html'; break;
  204. case 4: $url = '/ru/pages/'.$head.'.html'; break;
  205. case 5: $url = '/ru/pages/'.$head.'.html'; break;
  206. case 15: $url = '/cat.php?cat='.$head.'&lang=ru'; break;
  207. }
  208. }
  209. else $url = '';
  210. # Если лога сегодня нет к этому объекту
  211. if (mysql_num_rows(mysql_query("SELECT `id` FROM `clogs` WHERE `object_id`='".$atributes['object_id']."' AND `day`='".date('Y-m-d')."' LIMIT 1")) == 0)
  212. {
  213. mysql_query("
  214. INSERT INTO
  215. `clogs`
  216. (`object_id`, `day`, `action`, `gmadate_ts`, `object_type`, `url`)
  217. VALUES
  218. ('".$atributes['object_id']."', NOW(), '3', '".time()."', '".$atributes['object_type']."', '$url')
  219. ");
  220. }
  221. }
  222. // ЛОГИРОВАНИЕ END
  223. return $this->mysql_query("DELETE FROM ".$table." ".$where);
  224. }
  225. # СОЗДАНИЕ ТАБЛИЦЫ ЛОГОВ
  226. function createLogTable(){
  227. @mysql_query("DROP TABLE `logs`");
  228. mysql_query("
  229. CREATE TABLE IF NOT EXISTS `clogs` (
  230. `id` int(11) NOT NULL auto_increment,
  231. `object_id` int(10) NOT NULL,
  232. `day` date NOT NULL,
  233. `action` tinyint(1) NOT NULL,
  234. `gmadate_ts` int(15) NOT NULL,
  235. `object_type` varchar(100) NOT NULL,
  236. `url` varchar(200) NOT NULL,
  237. PRIMARY KEY (`id`),
  238. KEY `object_id` (`object_id`)
  239. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  240. ");
  241. file_put_contents(_CACHE_ABS_.'/logged', md5('go-web'));
  242. }
  243. }#CLASS
  244. ?>