два подключения к базе данных: php + mysql - PullRequest
0 голосов
/ 25 декабря 2011

У меня две базы данных на одном сервере с одинаковым именем пользователя и паролем. Сейчас я подключаюсь только к одной базе данных, но я бы хотел подключиться к обеим.

Пока это мой код, который подключается только к одной базе данных:

connect1.php

<?
$servername='localhost';

$dbusername='user';
$dbpassword='pass';

$dbname1='db1';
$dbname2='db2';

$link1 = connecttodb($servername,$dbname1,$dbusername,$dbpassword);
$link2 = connecttodb($servername,$dbname2,$dbusername,$dbpassword);

function connecttodb($servername,$dbname,$dbusername,$dbpassword)
{
    $link=mysql_connect ("$servername","$dbusername","$dbpassword",TRUE);
    if(!$link){die("Could not connect to MySQL");}
    mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error());
    return $link;
}
    ?>

Я отображаю результат в result.php с этим кодом:

<?
require "connect1.php"; 

$q=mysql_query("select * from table1 where username='test' order by id",link1);

while($nt=mysql_fetch_array($q)){
echo "$nt[location]";
}

?>

Я хотел бы отобразить аналогичные данные в result.php, но с подключением к db2

Как я могу это сделать? Спасибо!

Ответы [ 2 ]

3 голосов
/ 25 декабря 2011

Вместо одной глобальной переменной $ link вам понадобятся две:

$link1 = connecttodb($servername1,$dbname1,$dbusername1,$dbpassword1);
$link2 = connecttodb($servername2,$dbname2,$dbusername2,$dbpassword2);

И, конечно, измените connectodb () на:

function connecttodb($servername,$dbname,$dbuser,$dbpassword)
{
    $link=mysql_connect ("$servername","$dbuser","$dbpassword",TRUE);
    if(!$link){die("Could not connect to MySQL");}
    mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error());
    return $link;
}

Обратите внимание, что я добавил четвертый параметр в mysql_connect, указав значение TRUE для параметра new_link (это потребуется, только если две базы данных находятся на одном сервере).

Затем для каждого запроса вам нужно будет указать соответствующую переменную ссылки ($ link1 или $ link2) в соответствии с базой данных, которую вы хотите запросить.

0 голосов
/ 25 декабря 2011

Вам нужно подключиться во второй раз, и это очень важно, сохраните новый дескриптор в $link2.Поэтому сначала нужно добавить новую функцию соединения, и я бы посоветовал создать глобальные переменные с помощью ссылочного параметра:

function connecttodb(&$link, $servername,$dbname,$dbuser,$dbpassword)
{
   $link=mysql_connect ("$servername","$dbuser","$dbpassword");
   if(!$link){die("Could not connect to MySQL");}
   mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error());
}

connecttodb($link1, $servername, $dbname, $dbusername, $dbpassword);
connecttodb($link2, $servername2, $dbname, $dbusername, $dbpassword);

Затем вам нужно носить с собой переменные $ link1 и $ link2 для актуальных запросов:

$q = mysql_query("select * from table1 where username='test' order by id ", $link1);

Затем повторите тот же запрос для $ link2.И на этом этапе может быть лучше исследовать некоторые циклы для запросов к нескольким базам данных или класс, который абстрагирует его (если вы все равно делаете запросы к двум источникам).опция -lazy, если обе таблицы эквивалентны и работают на одном сервере, просто разные имена баз данных.Затем вы можете добавить запрос, используя UNION ALL:

 select * from table1 where username='test' order by id
 UNION ALL
 select * from db2.table1 where username='test' order by id
...