2009-06-18 2 views
0

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

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

ВКЛЮЧАЕТ выглядеть следующим образом

 
$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); 

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

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

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

Благодаря Пит

ответ

1

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

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

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

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

1

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

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

+0

Это не очень хороший или действенный подход. Это может быть непрактично, если вы произвольно чередовали источники базы данных по запросам. – cletus

+0

Я думаю, проблема будет связана с кэшированием. В любом случае, оставляя БД открытым, когда он не используется, тоже не работает. – Sev

+0

К сожалению, это не только запросы, но и обновления/вставки, поэтому я не думаю, что это сработает. Спасибо за обратную связь. – pedalpete

1

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

+0

Возможно, вы правы, что я могу расширить функциональность метода mysql_query, но я не верю, что у меня достаточно высокий уровень программирования, чтобы это было возможно. Вы говорите mysql_select_db ($ tableName), я предполагаю, что вы имели в виду $ databaseName. Но разве это не то же самое количество накладных расходов, как new_link = true? Я не очень разбираюсь в различиях между открытием и закрытием соединений или изменением баз данных. – pedalpete

Смежные вопросы