'2', '1'=>'0', '2'=>'1' ); function DBMysql(){ global $mysql_host, $mysql_port, $mysql_user, $mysql_password, $mysql_database; $mysql_port = ($mysql_port) ? ":$mysql_port" : ''; $this->connected=FALSE; if(mysql_connect("$mysql_host$mysql_port",$mysql_user,$mysql_password)){ if(mysql_select_db($mysql_database)){ @mysql_query("SET NAMES 'UTF8'"); //@mysql_query("SET CHARACTER SET 'UTF8'"); $connected=TRUE; } } else { echo mysql_error();} } function Close(){ mysql_close(); } function Query($query, $cache='cache'){ // запрашиваем закэшированные данные if ( ($res=file_cache::read( 'query', 'mysql', md5($query) )) && $cache!='no_cache') return $res; $res=mysql_query($query); if(!$res){ $this->ReportError($query); } if ($cache!='no_cache') // заносим данные в кэш file_cache::add( 'query', 'mysql', md5($query), $res ); return $res; } function QueryRow($query, $cache='cache'){ // запрашиваем закэшированные данные if ( ($res=file_cache::read( 'query_row', 'mysql', md5($query) )) && $cache!='no_cache') return $res; $res=$this->Query($query); $rec=$this->Fetch($res); if ($cache!='no_cache') // заносим данные в кэш file_cache::add( 'query_row', 'mysql', md5($query), $rec ); return $rec; } function Run($query, $cache='cache'){ if(!$res=mysql_query($query)){ $this->ReportError($query); }; if ($cache!='no_cache') // удаляем закэшированные данные file_cache::delete(NULL, 'mysql'); return $res; } function Fetch($res){ $rec=@mysql_fetch_array($res); return $rec; } function RetID(){ $rec=@mysql_insert_id(); return $rec; } function ReportError($query){ echo "Error '".mysql_error()."'in '$query'"; die(); } // генерирует запрос добавления function InsertRow($table, $data, $cache='cache'){ if (!$table) return array ('result'=>FALSE, 'message'=>'Ошибка изменения поля в БД. Не передано название таблицы! Обратитесь к разработчикам.'); if ( !is_array($data) ) return array ('result'=>FALSE, 'message'=>'Ошибка добавления в таблицу "'.$table.'".Нет данных или тип переданных данных не соответствует. Обратитесь к разработчикам.'); $script='INSERT INTO `'.TextToDB($table).'` '; $variables='('; $values='('; foreach ($data as $key=>$value) { if ($flag) { $variables.=','; $values.=','; } $variables.='`'.$key.'`'; $values.='\''.TextToDB($value).'\''; $flag=TRUE; } $script.=$variables.') VALUES '.$values.')'; //var_dump($script); if ( $res=$this->Run($script) ) { if ($cache!='no_cache') // удаляем закэшированные данные file_cache::delete(NULL, 'mysql'); return TRUE; } else return array ('result'=>FALSE, 'message'=>'Ошибка добавлении строки в БД. Обратитесь к разработчикам.'); } // обновление указанного поля в указанной таблице function UpdateField($table, $field, $value, $id=NULL, $id_field='ID', $cache='cache', $big_id=false){ if (!$table) return array ('result'=>FALSE, 'message'=>'Ошибка изменения поля в БД. Не передано название таблицы! Обратитесь к разработчикам.'); if (!$field) return array ('result'=>FALSE, 'message'=>'Ошибка изменения поля в БД. Не передано название столбца! Обратитесь к разработчикам.'); $script='UPDATE `'.TextToDB($table).'` SET `'.TextToDB($field).'`=\''.TextToDB($value).'\''; if ($big_id==true) $script.=(!$id) ? '' : ' WHERE `'.TextToDB($id_field).'`=\''.$id.'\''; else $script.=(!$id) ? '' : ' WHERE `'.TextToDB($id_field).'`='.(int)$id; // var_dump($script); if ( $res=$this->Run($script) ) { if ($cache!='no_cache') // удаляем закэшированные данные file_cache::delete(NULL, 'mysql'); return TRUE; } else return array ('result'=>FALSE, 'message'=>'Ошибка изменения поля в БД. Обратитесь к разработчикам.'); } // обновление указанного поля в указанной таблице function UpdateDate($table, $field, $value, $id=NULL, $id_field='ID', $cache='cache'){ if (!$table) return array ('result'=>FALSE, 'message'=>'Ошибка изменения поля в БД. Не передано название таблицы! Обратитесь к разработчикам.'); if (!$field) return array ('result'=>FALSE, 'message'=>'Ошибка изменения поля в БД. Не передано название столбца! Обратитесь к разработчикам.'); $script='UPDATE `'.TextToDB($table).'` SET `'.TextToDB($field).'`='.TextToDB($value).''; $script.=(!$id) ? '' : ' WHERE `'.TextToDB($id_field).'`='.(int)$id; //var_dump($script); if ( $res=$this->Run($script) ) { if ($cache!='no_cache') // удаляем закэшированные данные file_cache::delete(NULL, 'mysql'); return TRUE; } else return array ('result'=>FALSE, 'message'=>'Ошибка изменения поля в БД. Обратитесь к разработчикам.'); } // удаление указанной строки в указанной таблице function DeleteRow($table, $id=NULL, $id_field='ID', $cache='cache'){ if (!$table) return array ('result'=>FALSE, 'message'=>'Ошибка удаления строки в БД. Не передано название таблицы! Обратитесь к разработчикам.'); if ( is_array($res = $this->check_lock($table, 'lock', $id, 'ID')) ) { return $res; } $script='DELETE FROM `'.TextToDB($table).'`'; $script.=(!$id) ? '' : ' WHERE `'.TextToDB($id_field).'`='.(int)$id; if ( $res=$this->Run($script) ) { if ($cache!='no_cache') // удаляем закэшированные данные file_cache::delete(NULL, 'mysql'); return TRUE; } else return array ('result'=>FALSE, 'message'=>'Ошибка удаления поля в БД. Обратитесь к разработчикам.'); } // чтение списка в массив function QueryFetch($script){ $res=$this->Query($script); while ($data=$this->Fetch($res)) $return[]=$data; return $return; } // чтение списка в список function QueryFetchList($script){ $res=$this->Query($script); while ($data=$this->Fetch($res)) $return[$data[0]]=$data[0]; return $return; } // проверка существования колонки в указанной таблице function check_col($col, $table){ if ($res=$this->QueryRow('show columns from `'.$table.'` like \''.$col.'\'')) return TRUE; else return FALSE; } // выборка данных из нужного поля таблицы function get_field($table_name, $col_name, $row_id, $id_field='ID', $type_id="string") { // Прведение типов и эскейпирование переменных $table_name = TextToDB($table_name); $col_name = TextToDB($col_name); $row_id = TextToDB($row_id); if ($id_field!='ID') $id_field = TextToDB($id_field); if ($type_id=='string') $row_id = '\''.$row_id.'\''; // Скрипт выборки данных из конкретной ячейки $script = 'SELECT `'.$col_name.'` FROM `'.$table_name.'` WHERE `'.$id_field.'`='.$row_id ; if ($return=$this->QueryRow($script)) return $return[$col_name]; else return FALSE; } // выборка данных из нужной строки таблицы function get_row($table_name, $cols_name, $row_id, $id_field='ID', $type_id='integer') { // Прведение типов и эскейпирование переменных $table_name = TextToDB($table_name); $cols_name = TextToDB($cols_name); $row_id = TextToDB($row_id); $type_id = TextToDB($type_id); if ($id_field!='ID') $id_field = TextToDB($id_field); if ($cols_name == '*') { $cols = '*'; } else { $cols_name = explode(',', $cols_name); $cols = ''; foreach($cols_name as $name) $cols .= '`'.trim($name).'`,'; $cols = substr($cols, 0, -1); } if ($type_id=='string') $row_id = '\''.$row_id.'\''; // Скрипт выборки данных из конкретной строки $script = 'SELECT '.$cols.' FROM `'.$table_name.'` WHERE `'.$id_field.'`='.$row_id ; if ($return=$this->QueryRow($script)) return $return; else return FALSE; } function check_lock($table, $field, $id, $id_field='ID') { if ($this->check_col($field, $table)) { if($res = $this->get_field($table, $field, $id, $id_field)) { if($res[$field]==1) { return array ('result'=>FALSE, 'message'=>'Невозможно удалить эту запись. Она заблокированна для удаления.'); } else { return TRUE; } } else { return $res; } } } } $db=new DBMysql(); $db_second=new DBMysql(); // перебивает коннект $db ?>