2 базы одновременно

#
2 базы одновременно
Возник такой вопрос (возможно глупый, но я ответа не нашла).
Мне нужно работать с 2 базами одновременно (одна сайта, другая сторонняя, даже сервер другой) если я подсоединяюсь к своей второй базе, то при вызове функций класса DataBase они выполняются на моей второй базе. может есть какой-то хитрый прием как этого избежать?
#
Re: 2 базы одновременно
Гм, неужели ничего нельзя сделать?
Модератор
#
Re: 2 базы одновременно
Откройте второе соединение ч-з mysql_connect() и работайте с ним.
#
Re: 2 базы одновременно
не поверите, ровно так и делаю.
У меня как надо работает вот такой код (а не должен бы по моим представлениям)

/* создать соединение */
$link = @mysql_connect($dbNewHost, $dbNewUser, $dbNewPass) OR DIE("Ошибка подключения к серверу MySQL");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbNewBase, $link) or die(mysql_error());
$DataBase = & singleton('DataBase');
...
$res = $DataBase->select($query);

запрос выполняется в базе с меткой link. При этом мой класс (в методе которого тоже DataBase) не выполняется, т.к. не находит таблиц (естественно).
#
Re: 2 базы одновременно
Просто дело в том, что мне нужно одновременно работать с 2 сразу, а каждый раз переподключать соединение - несколько расточительно.
Модератор
#
Re: 2 базы одновременно
nnz-ipc,
Сообщите версию системы.
Запросы ч-з
DataBase::query()/DataBase::select()
выполняются в контексте
DataBase::db_connect
#
Re: 2 базы одновременно
Версия самая последняя обновленная (только сегодня установила обновления)
Я просто делала свой модуль/класс на основе вашего демонстрационного модуля, а там вот такой код (например)

function GetAllChildGroups($entity_group_id)
{
   $entity_group_id = intval($entity_group_id);
   $DataBase = & singleton('DataBase');
   $result = $DataBase->query("SELECT * FROM `entity_group_table` WHERE `entity_group_parent_id` = '{$entity_group_id}'");
   return $result;
}

т.о. получается что тут неправильно?
А 2 вопрос, если я везде понаставлю
DataBase::db_connect
, то не будет ли слишком много новых подключений? нельзя ли как-то сделать их 2 и потом просто менять ссылку на то, которое мы сейчас используем?
#
Re: 2 базы одновременно
Делаю вот так выдает ошибку

/* создать соединение */
$DataBase = & singleton('DataBase');
$DataBase->db_connect();

$link = @mysql_connect($dbNewHost, $dbNewUser, $dbNewPass) OR DIE("Ошибка подключения к серверу MySQL");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbNewBase, $link) or die(mysql_error());

$SynchIei = & singleton('SynchIei');
$groupsSynch = $SynchIei->GetAllActGroups(); //Создаем массив со всеми заполненными группами


Делаю вот так работает нормально

/* создать соединение */
$link = @mysql_connect($dbNewHost, $dbNewUser, $dbNewPass) OR DIE("Ошибка подключения к серверу MySQL");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbNewBase, $link) or die(mysql_error());

$DataBase = & singleton('DataBase');
$DataBase->db_connect();

$SynchIei = & singleton('SynchIei');
$groupsSynch = $SynchIei->GetAllActGroups(); //Создаем массив со всеми заполненными группами

т.е. получается что как только мне нужно вызвать какие-то методы класса (или даже системы?), то мне нужно опять делать
$DataBase->db_connect();
для меня это плохо.
Просто я делаю скрипт синхронизации товаров, по разным причинам их нужно синхронизировать по группам, групп много, т.е. получается что подсоединений к бд тоже будет много (или
$DataBase->db_connect();
работает как-то иначе?)
Модератор
#
Re: 2 базы одновременно
nnz-ipc,
mysql_connect вернет предыдущее открытое соединение при $new_link = false:
http://ru.php.net/mysql_connect
Другой вопрос - почему соединение сбрасывается, внутри DataBase все соединения выполняются в контексте ранее открытого соединения, которое хранится в свойстве db_connect

Напишите запрос в поддержку со ссылкой на эту тему, попробуем решить вопрос.
#
Re: 2 базы одновременно
Спасибо, думаю тут какой-то мой косяк, скорее всего. К сожалению, я не так часто работаю напрямую с базами.
Авторизация