Есть такой вот класс коннекта к базе и выполнения запросов. Проблема в том, что при создании второго объекта класса для 2-го соединения с другой БД, возникает конфликт, каким-то образом один коннект перебивается другим.
$db=new DBMysql();
$db_second=new DBMysql(); // перебивает коннект $db
У кого какие предположения? Сам класс:
<?
class DBMysql{
var $connected;
// версия файла
public $version = array(
'0'=>'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
?>
Да, перебивает, потому что вы устанавливаете соединение и не присваиваете его никакой переменной, а функции mysql_select_db, mysql_query используют текущее подключение, если другое не передано в качестве аргумента.
Вот очень краткий пример, который только суть передает:
Class DB {
private $link;
public function __construct($host, $port, $user, $pass, $db) {
$this->link = mysql_connect($host.':'.$port, $user, $pass, true);
mysql_select_db($db, $this->link);
}
function __desctruct() {
mysql_close($this->link);
}
public function Query($query) {
mysql_query($query, $this->link);
}
}
$db1 = new DB($mysql_host, $mysql_port, $mysql_user, $mysql_pass, $mysql_dbname);
$db2 = new DB($mysql_host, $mysql_port, $mysql_user, $mysql_pass, $mysql_dbname);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Есть таблица с новостями и есть таблица с тегами, которая имеет Id новости и имя тегаКак мне выбрать новость и ее теги одним запросом, отдельно...
ЗдравствуйтеПодскажите, пожалуйста, как можно средствами node-webkit узнать такие параметры, как название ноутбука (acer, asus, lenovo etc и т
У меня есть событие, при котором, когда наводишь курсор на изображение, оно меняется поочередно на другие (указан путь к папке, где эти изображения)Помогите,...