![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Piszę z kolejnym, tym razem pewnie banalnym problemem. Jak połączyć się do kilku baz danych naraz? Prosty przykład:
Tu łączymy się do jednej bazy - "bla bla bla". A ja bym chciał połączyć się jeszcze do "ble bla ble" za jednym zamachem. Jak to zrobić? Ten post edytował ZuyPan 7.07.2010, 10:14:05 |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
mysql_connect i zasada działania jak w pierwszym komentarzu (od "tpl99 at yandex dot ru").
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Whenever you open two connections to a single database, you are likely not to get any error when selecting not existing db. <?php $db1 = mysql_connect( ... ); mysql_select_db('existing_db',$db1); $db2 = mysql_connect( ... ); mysql_select_db('not_existing_db', $db2); mysql_query(... , $db2); //will return no errors and the query wouldn't be executed. ?> Pay attention and you may save few hours of debugging. Dzięki (IMG:style_emoticons/default/smile.gif) . Teraz tylko czy ja to dobrze zrozumiałem: dla każdej innej bazy robi się osobne połączenie (w tym przypadku $db1 i $db2) a potem jeśli chce się zrobić zapytanie do pierwszej to w postaci mysql_query(... , $db1); a jeśli do drugiej to w postaci mysql_query(... , $db2); |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Dobrze zrozumiałeś (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Uwaga! Informacja powyżej jest niepełna. wywołanie connecta dla tych samych danych host, user pass zwróci ten sam identyfikator! To pułapka na jaką się nadziejesz niestety jeśli wywołasz kilkukrotnie connecta w obrębie jednego skryptu. Jeśli baza jest na tym samym hoście, to przed użyciem innej bazy musisz zmienić ją funkcją zmiany bazy. To co postulujecie, czyli inne $db1 i $db2 dla mysql_query można użyć tylko gdy funkcja connect dla obu połączeń zwraca inne identyfikatory. Da się to obejść na 2 sposoby:
1) jeśli znasz nazwę kanoniczną i IP serwera. mysql_connect( 'host_jako_adres', 'user', 'pass') mysql_connect( 'host_jako_IP', 'user', 'pass') zwracają różne (!) identyfikatory połączenia, co można wykorzystać do łączenia się z 2 różnymi bazami na tym samym hoście, a to jest nieraz bardzo przydatne, jeśli user ma prawa do kilku baz. Kto nie wierzy niech sprawdzi: a potem Sam się kiedyś zdziwiłem, że pierwszy przykład wskazuje mi w obu przypadkach ten sam id połączenia. Wywołanie drugie mysql_connect dla tych samych danych host-user-pass po prostu zwraca nam ten te same identyfikatory i nie tworzy nowego, przez co wywołanie zmiany bazy potrafi być nie do końca przewidywalne. 2) Użycie 4 parametru funkcji wymuszającego nowe połączenie zadziała. Ale 4 parametr jest ignorowany w "safe mode", więc jest kupa i trzeba używać mojego obejścia. Wniosek? Znajomość nazwy hosta w formie IP i kanonicznej może być nieraz jedynym bezpiecznym rozwiązaniem jeśli nie znamy konfiguracji serwera a musimy nawiązywać połączenia do 2 baz na te same dane. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
ech... no to kiszka :/ Dedyk - bo na takim stronka będzie "siedzieć" stoi u kumpla z neta i puki co i tak nie sprawdzę czy działa - nie dostałem jeszcze danych dostępowych jedynie znam ip maszynki i adres: perfectmt2.pl (nie do końca wiem czy to miałeś na myśli mówiąc postać "kanoniczna") bo innym znanym mi "czymś" co mogło by być postacią kanoniczą jest "localhost".
W moim sposobie widziałem to tak (dopóki nie wyjawiłeś mi "strasznej" prawdy (IMG:style_emoticons/default/tongue.gif) ) plik config.php (includuje się go w każdym pliku gdzie korzysta się z bazy)
W takim wypadku powyższy skrypt chyba nie zadziała. Chyba, że jednak (IMG:style_emoticons/default/tongue.gif) Korzystając z okazji czy przy "$rekord = mysql_fetch_array($query);" (w 3 linijka z kodem od końca) też trzeba dodawać 2 parametr w postaci $polaczenie1 ? |
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Identyfikator połaczenia wykorzystują tylko określone funkcje: mysql_query, mysql_error, mysql_insert_id i parę jeszcze innych. Funkcje korzystające już z wyniku tej, która go używa, zazwyczaj nie (IMG:style_emoticons/default/smile.gif) A że mysql_fetch_* używają wyniku z mysql_query, to nie posiadają go jako parametru opcjonalnego. Twoim rozwiązaniem jest użycie wspomnianego 4 parametru funkcji mysql_connect, która wymusza utworzenie nowego połączenia. Innymi słowy zrób tak:
$polaczenie2 = mysql_connect($host, $login, $haslo, true); i powiedz czy to jest to co chciałeś (IMG:style_emoticons/default/winksmiley.jpg) Przy czym dla pewności na końcu skryptu używałbym mysql_close, by zamykać otwarte połączenia. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Działa! (IMG:style_emoticons/default/smile.gif) z dodaniem parametru "true" do 2 połączenia z bazą wszystko działa tak jak chciałem (IMG:style_emoticons/default/smile.gif) Ładnie pobiera wyniki z 2 różnych baz na jednym hoście i użytkowniku (IMG:style_emoticons/default/smile.gif)
Ech... Co ja bym dał żeby wiedzieć tyle co Ty (IMG:style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
A nie prościej użyć PDO?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
PDO? oświeć mnie (IMG:style_emoticons/default/winksmiley.jpg)
|
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Z tego co widzę to to jest jakoś obiektowo zrobione, a ja się nie mam zamiaru "babrać" w tym czymś
|
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Bardziej babrasz właśnie z mysql_connect.
Poza tym co to za argument "nie mam zamiaru 'babrać' się"... |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Z tym, że babrając się w ten sposób coś rozumiem, i jestem w stanie sam sobie to stworzyć natomiast przy zabawie z obiektówką gubię się w pierwszej linijce kodu i najzwyczajniej w świecie jej nie rozumiem. Wydaje mi się zabawą w kotka i myszkę po całym skrypcie. Każdy robi tak jak lubi (IMG:style_emoticons/default/smile.gif) Temat raczej już wyczerpany.
|
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Bo wydaje mi się, ze nie chcesz zrozumieć. Dla mnie o wiele bardziej zrozumiałe jest to
niż zabawa z mysql. Zresztą co tutaj wielkiego rozumieć? Zalety: o wiele wygodniejsze zadawania zapytań, porządek i wiele innych. No ale cóż twój wybór. Po prostu mówię jakie podejście jest prawidłowe i jakich powinno się unikać. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 11:29 |