Создайте временное подключение к БД без потери исходного подключения по умолчанию

#php #mysql

#php #mysql

Вопрос:

У меня очень большой и неструктурированный скрипт.

В какой-то момент скрипта устанавливается подключение к БД.

Через некоторое время после этого мне нужно установить новое подключение к другой БД, выполнить запрос, а затем отключиться.

После того, как я сделаю это, мне нужно, чтобы все последующие вызовы mysql_query() использовали исходную ссылку на БД.

Я знаю, что могу получить идентификатор ссылки из первого mysql_connect() и использовать его во всех соответствующих вызовах mysql_query(), но я не хочу изменять больше кода, чем необходимо. Я хочу сделать что-то вроде этого:

 //... loads of code ...

mysql_connect("original connection");
mysql_query(...); // don't want to modify these lines

//... loads more code ...

$link = get_current_mysql_link_identifier(); // imaginary function
$new_link = mysql_connect("my new connection");
mysql_query(...); // uses new connection
mysql_close($new_link);
reinstate_old_link($link); // imaginary function

//... loads more code ...

mysql_query(...) // line remains unchanged. uses original DB link
  

Без этих воображаемых функций, как только второе соединение закрывается, mysql_query() не использует исходное соединение по умолчанию; он продолжает пытаться использовать более свежее закрытое соединение.

Комментарии:

1. Я думаю, но я вполне могу ошибаться , что после закрытия второго соединения mysql_ * функции будут работать со следующим доступным соединением, которое в данном случае было бы первым соединением.

2. Не очень элегантное решение, но почему вы не подключаетесь повторно к первой базе данных после выполнения запросов к вторичной базе данных?

3. @Treffynnon Я провел несколько тестов, и, похоже, что он не возвращается к исходному вопросу после mysql_close()

4. @Raisen Это вариант, но я имею дело с действительно запутанным кодом, и я не уверен на 100%, откуда взялось соединение!

5. Вместо того, чтобы восстанавливать_old_link(), просто снова вызовите mysql_connect с исходными параметрами подключения. В документации говорится, что в этом случае существующее соединение будет использовано повторно…

Ответ №1:

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

Комментарии:

1. Привет, Джим. Цитируя мой первоначальный вопрос: «Я знаю, что могу получить идентификатор ссылки из первого mysql_connect() и использовать его во всех соответствующих вызовах mysql_query(), но я не хочу изменять больше кода, чем необходимо». Похоже, то, чего я хочу достичь, невозможно.