[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подключение ко второй БД
zvezda_t
Здравствуйте!
Скажите мне пожалуйста:
Как мне правильно подключиться к еще одной БД?

добавила еще одно подключение:
mssql_select_db("Base1");
mssql_select_db("KLADR");

теперь у меня запросы без указания базы не работают(((
SELECT * FROM dbo.tab1
только так:
SELECT * FROM Base1.dbo.tab1


это мне что весь код теперь исправлять??? другого выхода нет?



Спустя 2 минуты, 21 секунда (9.06.2010 - 12:57) waldicom написал(а):
Когда выполняется соединение к базе, необходимо запоминать ресурс, и использовать этот ресурс в функциях (обычно, как второй параметр)

Спустя 13 минут, 8 секунд (9.06.2010 - 13:10) zvezda_t написал(а):
извините, не поняла((

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

Спустя 12 минут, 44 секунды (9.06.2010 - 13:23) Basili4 написал(а):
Есть более прсотой вариант с помощью mssql_select_db подключится к одной базе а в запросах ко второй указывать имя базы.

Спустя 1 минута, 41 секунда (9.06.2010 - 13:24) agentor написал(а):
а разве так нельзя?
$db1 = mssql_connect("строим соединение");
mssql_select_db('Base1',$db1);

$db2 = mssql_connect("строим соединение");
mssql_select_db('KLADR', $db2);

mssql_query("SELECT * FROM Base1", $db1);


при построении запроса просто в запросе дополнительно пишем к какой базе подключатся..
в нашем варианте к $db1

Спустя 7 минут, 35 секунд (9.06.2010 - 13:32) Basili4 написал(а):
agentor
Так можно. Но это надо весь старый код править.

Спустя 4 минуты, 17 секунд (9.06.2010 - 13:36) zvezda_t написал(а):
agentor в моём случае $db1 и $db2 это соединение с одним и тем же сервером, проблема именно в том чтобы явно не переписывать запросы с указанием базы
Цитата
просто в запросе дополнительно пишем к какой базе подключатся

в том то и дело что не просто - это мне миллион запросов сейчас переписывать((
Цитата
в нашем варианте к $db1

это же не база - а соединение с сервером blink.gif


Цитата
Есть более прсотой вариант с помощью mssql_select_db подключится к одной базе а в запросах ко второй указывать имя базы.

Basili4, да это для меня выход... а если название новой БД измениться, как это предусмотреть? rolleyes.gif


Спустя 6 минут, 37 секунд (9.06.2010 - 13:43) zvezda_t написал(а):
так, можно:

DEFINE('DBKLADR',"KLADR");

...

mssql_query("SELECT * FROM ".DBKLADR.".dbo.kladr ");


biggrin.gif
как грамотно?rolleyes.gif

Спустя 5 минут, 25 секунд (9.06.2010 - 13:48) SlavaFr написал(а):
Цитата (zvezda_t @ 9.06.2010 - 10:36)
в том то и дело что не просто - это мне миллион запросов сейчас переписывать((

да, начинай переписывать.

Спустя 34 минуты, 1 секунда (9.06.2010 - 14:22) zvezda_t написал(а):
немцы брысь! biggrin.gif
русские не сдаются!

Спустя 6 минут (9.06.2010 - 14:28) Basili4 написал(а):
Цитата (zvezda_t @ 9.06.2010 - 14:36)
DEFINE('DBKLADR',"KLADR");

Вполне решение.

Спустя 3 часа, 17 минут, 13 секунд (9.06.2010 - 17:45) Nikitian написал(а):
$db1 и $db2 - это соединение с сервером бд, как вы правильно заметили, но если вы выбрали бд в рамках одного соединения, то в рамках именно этого соединения у вас и будет выбрана указанная база. Если у вас не вперемешку используются разные базы, то можно перед блоком в котором используется некоторая бд KLADR делать mssql_query('user KLADR'); (наверно в MS так же, как и в My идёт смена бд) либо mssql_select_db('KLADR'); либо, что правильнее, использовать 2 разных соединения, либо, что опять-таки вполне правильно: использовать везде префиксы, тогда вообще селект_дб можно не делать.

Спустя 2 часа, 55 минут, 19 секунд (9.06.2010 - 20:41) zvezda_t написал(а):
до этого момента всё поняла:
Цитата
либо, что правильнее, использовать 2 разных соединения


можно на примере? я что то запуталась((

Цитата
либо, что опять-таки вполне правильно: использовать везде префиксы, тогда вообще селект_дб можно не делать.


префиксы? как это?

Спустя 31 минута, 27 секунд (9.06.2010 - 21:12) Nikitian написал(а):
Цитата (zvezda_t @ 9.06.2010 - 17:41)
до этого момента всё поняла:
Цитата
либо, что правильнее, использовать 2 разных соединения


можно на примере? я что то запуталась((


$link1=$link2=mssql_connect(....);
mssql_select_db('Base1',$link1);
mssql_select_db('KLADR',$link2);

Ну и далее в зависимости от того, в какую бд отправляются запросы, подставляете либо $link1, либо $link2:

mssql_query('select * from sometable1',$link1);
mssql_query('delete from sometable2',$link2);

Цитата (zvezda_t @ 9.06.2010 - 17:41)

Цитата
либо, что опять-таки вполне правильно: использовать везде префиксы, тогда вообще селект_дб можно не делать.


префиксы? как это?

Префиксы: mssql_query('select * from Base1.sometable',$link);

Спустя 13 часов, 32 минуты, 54 секунды (10.06.2010 - 10:45) agentor написал(а):
дык я об этом и писал..

Спустя 58 минут, 5 секунд (10.06.2010 - 11:43) zvezda_t написал(а):
Цитата

$link1=$link2=mssql_connect(....);
mssql_select_db('Base1',$link1);
mssql_select_db('KLADR',$link2);


Ну и далее в зависимости от того, в какую бд отправляются запросы, подставляете либо $link1, либо $link2:


mssql_query('select * from sometable1',$link1);
mssql_query('delete from sometable2',$link2);


Цитата
дык я об этом и писал..


Вот именно! Если $link1=$link2, разве можно обойтись без префиксов?
эта запись :
mssql_select_db('Base1',$link1);
mssql_select_db('KLADR',$link2);

что ли устанавливает связь между соединением и БД??

в таком случае, мои извинения agentor, за непонимание...

Спустя 1 час, 1 минута, 38 секунд (10.06.2010 - 12:45) Nikitian написал(а):
Цитата
mssql_select_db() sets the current active database on the server that's associated with the specified link identifier.

Перевод.

Т.е. вы правильно поняли

Спустя 10 часов, 6 минут, 42 секунды (10.06.2010 - 22:51) tomash написал(а):
нужно перед каждым запросом к другой базе вызывать mssql_select_db(), т.к. эта функция не создает подключение, а устанавливает указаную БД как активную и использует ее по умолчанию! Ну или в запросе явно указывать базу. А в идеале сделать для каждой базы свой линк (ну это и без меня уже подсказали).

Спустя 9 часов, 36 минут, 56 секунд (11.06.2010 - 08:28) Basili4 написал(а):
На мой взгляд лучше всего указывать базу в запросе ведь может быть такой вариант когда в запросе требуются данные из двух баз


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.