Возможный дубликат:
Как вы подключаетесь к нескольким базам данных MySQL на одной веб-странице?
Если я хочу подключиться к одному db, сделайте некоторый запрос, а затем выполните другой запрос из другого БД. Как мне это сделать? Я просто
mysql_pconnect("host:3306", "user", "password") or die(mysql_error()); mysql_select_db("Test") or die(mysql_error()); //do some query mysql_pconnect("host2:3306", "user", "password") or die(mysql_error()); mysql_select_db("Test") or die(mysql_error()); //do another query
Так вы это делаете? Несколько вопросов. Заметьте, я использовал pconnect, это влияет на вызов его дважды на одной странице? Кроме того, мне нужно закрыть соединение для первого, прежде чем вызывать второй?
Вам нужно сохранить ссылку на соединение с базой данных в отдельной переменной. Например
$connection_1 = mysql_connect("host:3306", "user", "password") or die(mysql_error()); mysql_select_db("Test", $connection_1) or die(mysql_error()); $connection_2 = mysql_pconnect("host2:3306", "user", "password") or die(mysql_error()); mysql_select_db("Test", $connection_2) or die(mysql_error()); mysql_query("your query", $connection_1); // run query for first connection mysql_query("your query", $connection_2); // run query for second connection
Вам необходимо сохранить ресурс, возвращенный из mysql_connect, и использовать его при выполнении mysql_select_db.
$res1 = mysql_pconnect(...); mysql_select_db("Test", $res1); $res2 = mysql_pconnect(...); mysql_select_db("Test", $res2);
Затем используйте $ res1 или $ res2 при запросе соответствующего db.
mysql_query("select * from test_table", $res1); mysql_query("select * from test_table", $res2);
Так вы это делаете?
Это оставит ваш скрипт с двумя открытыми соединениями с разными хостами до его завершения.
Вы можете повторно использовать одно из этих соединений, снова вызвав mysql_pconnect
.
Заметьте, я использовал
pconnect
, это влияет на вызов его дважды на одной странице?
Из документов :
Сначала функция попытается найти (постоянную) ссылку, которая уже открыта с тем же хостом, именем пользователя и паролем
Поскольку ваши хосты разные, будут два разных соединения
Кроме того, мне нужно закрыть соединение для первого, прежде чем вызывать второй?
Вы не можете явно закрыть соединение с помощью mysql_pconnect
.
Вы сделали RTM, правильно, потому что вы не используете $link_identifier
?
http://us.php.net/mysql_select_db :
bool mysql_select_db ( string $database_name [, resource $link_identifier ] )
Устанавливает текущую активную базу данных на сервере, которая связана с указанным идентификатором ссылки. Каждый последующий вызов mysql_query () будет выполнен в активной базе данных.
параметры
database_name
Имя базы данных, которая должна быть выбрана.
link_identifier
Соединение MySQL.Если идентификатор ссылки не указан, предполагается последняя ссылка, открытая mysql_connect (). Если такой ссылки не обнаружено, она попытается создать такую, как если бы mysql_connect () был вызван без аргументов. Если соединение не установлено или не установлено, генерируется ошибка уровня E_WARNING.
Всякий раз, когда вы используете pconnect, вы делите соединение (не только на странице, но, возможно, на других страницах) – в вашем случае здесь не делайте этого. Вам нужны изолированные ссылки, поэтому отдельные транзакции. Вероятно, вы должны, вероятно, рассмотреть mysql_connect
и явно использовать параметр new_link
. Наконец, явно используйте $link_identifier
, так что вы $link_identifier
, к чему подключаетесь.