Вопрос

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

У меня есть 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);

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

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

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

Спасибо Пит

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top