подключение к нескольким базам данных - PullRequest
2 голосов
/ 01 июля 2011

Я использую sphinx для поиска по сайту, и он отлично работает, но сейчас я пытаюсь подключиться к 2 базам данных mysql с одинаковой точной структурой, а db2 является продолжением db1, поэтому вся информация должна проходить гладко.Я могу легко получить результаты, переключив имя БД в коде, но как я могу выбрать оба сразу?

вот код, который я использую

$CONF['sphinx_host'] = 'localhost';
$CONF['sphinx_port'] = 9312;
$CONF['mysql_host'] = "localhost";
$CONF['mysql_username'] = "user";
$CONF['mysql_password'] = "password";
$CONF['mysql_database'] = "db1";
$CONF['sphinx_index'] = "index index2";


$db = mysql_connect($CONF['mysql_host'],$CONF['mysql_username'],$CONF['mysql_password']) or die("ERROR: unable to connect to database");
mysql_select_db($CONF['mysql_database'], $db) or die("ERROR: unable to select database");


$sql = str_replace('$ids',implode(',',$ids),$CONF['mysql_query']);
$result = mysql_query($sql) or die($CONF['debug']?("ERROR: mysql query failed: ".mysql_error()):"ERROR: Please try later");

Этот код работает нормально, если явведите одну базу данных MySQL в $CONF['mysql_database'] = "db1";, но мне нужно выбрать из db1 и db2.Кто-нибудь знает, как мне этого добиться?Кроме того, я не опубликовал запрос, потому что не думаю, что он очень полезен, это просто запрос на выборку, и я уверен, что вы поняли идею.

1 Ответ

2 голосов
/ 01 июля 2011

Если базы данных размещены на одном и том же сервере, вы можете просто произвольно выбрать одну из них при вызове mysql_select_db() и затем квалифицировать все имена таблиц в ваших SQL-запросах с префиксом databasename.. Вы даже можете смешивать и сопоставлять таблицы из обеих баз данных в одном запросе. например.

select h.lastname, h.firstname, p.petname
    from db1.humans as h
    left outer join db2.pets as p on p.human_id = h.id;

Если вам не нужно писать запросы, затрагивающие обе базы данных, вы можете просто снова вызывать mysql_select_db() каждый раз, когда вам нужно переключить базы данных.

Если базы данных размещены на разных серверах, вам потребуется 2 отдельных вызова на mysql_connect(). В этом случае обязательно передайте необязательный параметр $link всем mysql_ функциям, поскольку по умолчанию используется просто использование самого последнего соединения, что может привести ко всем видам ошибок. Поскольку каждая база данных будет иметь отдельное соединение, вы не сможете запускать отдельные запросы, которые обращаются к обеим базам данных.

...