2011-12-25 4 views
0

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

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

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

How Я могу это сделать? Спасибо!

ответ

3

Вместо того, чтобы иметь единую глобальную переменную $ связи, вам нужно две:

$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

Что не работает? вы получаете сообщение об ошибке? – Yaniro

+1

@ SašoKrajnc не оставлять комментарии в комментариях, становится трудно читать. Измените свой вопрос и добавьте его там –

+0

ok ... Я публикую измененный код;) –

0

Вам нужно подключиться во второй раз, и это важно, сохраните новый дескриптор в $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 переменные для actualy запросов:

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

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


На самом деле есть и супер-ленивым вариант, если обе таблицы эквивалентны и работает на том же сервере, просто разные имена баз данных. Затем можно добавить в запрос с помощью UNION ALL:

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

извините ... я не знаю, как получить комментарий в код =) –

+0

Ваш синтаксис неверен. Также не отправляйте пароли. Для использования кода используйте обратные ссылки. Но не отправляйте длинный код в комментарии в любом случае, используйте ссылку редактирования на свой вопрос. – mario

+0

Спасибо ... Сейчас он работает;) –

Смежные вопросы