Быстрое переключение из одной базы в другую

Статус
В этой теме нельзя размещать новые ответы.

sultan347

Участник
Регистрация
25 Апр 2009
Сообщения
230
Реакции
7
Скрипт работает с базой `A` в 95% случаев, но временами надо переключатся в базу `B`, и сразу возвращаться по умолчанию в базу `A`. Допустим в начале скрипта подключились к базе `A`:
PHP:
$db1 = mysql_connect("localhost","user1","pasword1");
$db2 = mysql_connect("localhost","user2","pasword2");
mysql_select_db("A",$db1) or die("error");
mysql_query("SET NAMES 'utf8'");
Далее?
 
У меня для таких целей было два экземпляра класса с разными настройками подключения. Если подключаешься к первой базе - используешь один. если ко второй - то второй.
Никаких проблем.
 
PHP:
mysql_select_db("B",$db2) or die("error");
 
PHP:
$db1 = mysql_connect("localhost","user1","pasword1");
$db2 = mysql_connect("localhost","user2","pasword2");
mysql_select_db("A",$db1) or die("error");
mysql_query("SET NAMES 'utf8'");
mysql_query(...);

mysql_select_db("B",$db2) or die("error");
mysql_query("SET NAMES 'utf8'");
mysql_query(...);

mysql_select_db("A",$db1) or die("error");
mysql_query("SET NAMES 'utf8'");
mysql_query(...);
если настроить к обеим базам одинаковый юзер то можно напрямую в запросе указывать из какой базы брать:
PHP:
$db = mysql_connect("localhost","user","pasword");
mysql_select_db("A",$db) or die("error");
mysql_query("SET NAMES 'utf8'");
mysql_query("SELECT * FROM test_table");
mysql_query("SELECT * FROM B.test_table");
 
написать/взять готовый класс для работы с базой данных, а при необходимости выбирать тот или иной экземпляр класса.
 
если настроить к обеим базам одинаковый юзер то можно напрямую в запросе указывать из какой базы брать:
PHP:
$db = mysql_connect("localhost","user","pasword");
mysql_select_db("A",$db) or die("error");
mysql_query("SET NAMES 'utf8'");
mysql_query("SELECT * FROM test_table");
mysql_query("SELECT * FROM B.test_table");
То есть в этом случае не надо будет обратно(постоянно) переключатся в "A"?

Добавлено через 8 минут
То есть в этом случае не надо будет обратно(постоянно) переключатся в "A"?
Хм, а такой вариант например канает:
PHP:
mysql_query("SELECT B.test_table.id,A.table.title FROM `B`.`test_table`,`A`.`table` WHERE B.test_table.id=A.table.id LIMIT 3");
?
 
PHP:
function mysql_q_db1( $q ) {
	mysql_select_db ( База1 ) or die ( mysql_error () );
	$query = mysql_query ( $q );
	return $query;
}
function mysql_q_db2( $q ) {
	mysql_select_db ( База2 ) or die ( mysql_error () );
	$query = mysql_query ( $q );
	return $query;
}




правда без возврата... хм...
 
Да в запросе можно указывать любые базы которые видет юзер, выбранная база с mysql_select_db становится базой по умолчанию и все запросы где не указана база идут к ней, например после mysql_select_db("A",$db) or die("error"); будет:
Код:
SELECT t1.id, t2.title FROM B.test_table t1, A.table t2 WHERE t1.id=t2.id LIMIT 3
то же самое что и:
SELECT t1.id, t2.title FROM B.test_table t1, table t2 WHERE t1.id=t2.id LIMIT 3
если title есть только во второй таблице то можно убрать t2:
SELECT t1.id, t2.id, title FROM B.test_table t1, table t2 WHERE t1.id=t2.id LIMIT 3




То есть в этом случае не надо будет обратно(постоянно) переключатся в "A"?

Хм, а такой вариант например канает:
PHP:
mysql_query("SELECT B.test_table.id,A.table.title FROM `B`.`test_table`,`A`.`table` WHERE B.test_table.id=A.table.id LIMIT 3");
?
 
Мне кажется в этом варианте проще всего написать две функции и ими манипулировать. Не будет лишних нагрузок на сервер и лишних открытых соединений. Соеденились с одной БД, поработали, закрыли и соеденились с другой (используем для этого условие if:(


А лучше вообще взять класс для работы с БД. Самое оптимальное, ИМХО.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху