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

Тема в разделе "PHP", создана пользователем sultan347, 26 окт 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sultan347

    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'");
    Далее?
     
  2. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    У меня для таких целей было два экземпляра класса с разными настройками подключения. Если подключаешься к первой базе - используешь один. если ко второй - то второй.
    Никаких проблем.
     
  3. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    PHP:
    mysql_select_db("B",$db2) or die("error");
     
  4. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    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");
     
  5. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    написать/взять готовый класс для работы с базой данных, а при необходимости выбирать тот или иной экземпляр класса.
     
  6. sultan347

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    То есть в этом случае не надо будет обратно(постоянно) переключатся в "A"?

    Добавлено через 8 минут
    Хм, а такой вариант например канает:
    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"); 
    ?
     
  7. sorcer

    sorcer Создатель

    Регистр.:
    21 фев 2009
    Сообщения:
    35
    Симпатии:
    4
    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;
    }



    правда без возврата... хм...
     
  8. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    Да в запросе можно указывать любые базы которые видет юзер, выбранная база с 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
    



     
    sultan347 нравится это.
  9. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    731
    Симпатии:
    421
    Мне кажется в этом варианте проще всего написать две функции и ими манипулировать. Не будет лишних нагрузок на сервер и лишних открытых соединений. Соеденились с одной БД, поработали, закрыли и соеденились с другой (используем для этого условие if:(

    PHP:
    /* Соединяемся, выбираем базу данных */
    function connect2mysql($mysql_host$mysql_user$mysql_password$mysql_database)
        {
        global 
    $link;

        
    $link = @mysql_connect($mysql_host$mysql_user$mysql_password)

        if (
    $link)
            {
            if @
    mysql_select_db($mysql_database) return true;
            else return 
    false;
            }
        else return 
    false;
        }


    /* Закрываем соединение */
    function close2mysql($link)
        {
        
    mysql_close($link);
        }

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

    sultan347

    Регистр.:
    25 апр 2009
    Сообщения:
    230
    Симпатии:
    7
    Какой рекомендуешь?
     
Статус темы:
Закрыта.