Изменение подключенной базы данных
-
06-07-2019 - |
Вопрос
Кажется, я хожу туда-сюда по этому поводу, иногда у меня это работает, часто нет, и я не могу понять, как / почему я могу заставить это работать иногда, а в другое время это не сработает.
У меня есть 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.