Изменение подключенной БД - PullRequest
0 голосов
/ 19 июня 2009

Я, кажется, снова и снова об этом, иногда это работает для меня, часто это не так, и я не могу понять, как / почему я могу заставить его работать иногда, а в других случаях это не будет .

У меня есть 5 баз данных, и мне нужно получить данные из каждой из них во время процедуры обслуживания. Для каждой из баз данных у меня есть внешний файл, который содержит весь код соединения с БД, который я включил в свою страницу.

Включения выглядят следующим образом

$SGcon = mysql_connect("localhost","root","");

if (!$SGcon)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("sGopen", $SGcon);

Для каждой базы данных я предоставляю различные переменные, поэтому следующая база данных будет

$PTcon = mysql_connect("localhost","root","");

if (!$PTcon)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("pTsecond", $PTcon);

Затем, когда я вызываю свой запрос, я использую

 
mysql_query($getQuery,  $PTcon);
mysql_query($secondQuery, $SGcon);

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

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

Между базами данных есть много взад-вперед, поскольку я сравниваю данные из одной базы данных с данными в другой, поэтому я тоже пытаюсь с этим справиться.

Спасибо Пит

Ответы [ 3 ]

1 голос
/ 19 июня 2009

По умолчанию, если вы передадите mysql_connect те же аргументы, что и при предыдущем вызове, он вернет кэшированное соединение, если оно доступно, вместо создания нового. Таким образом, оба запроса работают с той базой данных, которую вы в последний раз передали mysql_select_db.

Передача new_link=true позволит избежать такого поведения, хотя соединения с базой данных могут быть дорогими, поэтому вы должны стараться держать их как можно меньше открытыми.

Подробное объяснение для new_link:

Если сделан второй звонок mysql_connect() с тем же аргументы, никакой новой ссылки не будет установлено, но вместо этого ссылка идентификатор уже открытой ссылки будет возвращен. Новая ссылка параметр изменяет это поведение и mysql_connect() всегда открывает новая ссылка, даже если mysql_connect() был звонил раньше с тем же параметры. В безопасном режиме SQL это параметр игнорируется.

1 голос
/ 19 июня 2009

Если нет особой причины, вы хотите поддерживать как можно более низкие соединения дБ. Я бы использовал одно соединение и написал бы метод для расширения функциональности метода mysql_query (). Вы можете передать ей строку SQL и имя таблицы, после чего функция вызывает mysql_select_db ($ tableName) и повторно использует это же соединение для обработки SQL.

1 голос
/ 19 июня 2009

Я думаю, что если вы закроете соединение БД между каждым запросом, вы решите проблему.

И если вы проводите много сравнений между базами данных, я бы просто использовал 1 оператор select для запроса всех баз данных одновременно.

...