Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dwa połaczenia z bazą - dziwne działanie..
Forum PHP.pl > Forum > Przedszkole
haryb
Dzisiaj natrafiłem na dziwny przypadek z połączeniem sie do dwóch baz w skrypcie, poniżej przedstawie wycinku kodów, plików struktury aplikacji i opis problemu.

Po pierwsze mamy sobie plik SQL_CONNECT.inc w tym pliku mamy miedzy innymi:
  1. <?php
  2. class SQL_CONNECT {
  3.  
  4. var $bazaLink;
  5. var $status;
  6. var $baza;
  7.  
  8. function SQL_CONNECT($host,$uzytkownik,$haslo,$nazwa_bazy) {
  9. $this -> polacz($host, $uzytkownik, $haslo, $nazwa_bazy);
  10. }
  11.  
  12. function polacz($_host, $_uzytkownik, $_haslo, $_baza) {
  13. $wynik = @mysql_connect($_host, $_uzytkownik, $_haslo);
  14.  
  15. if (@mysql_select_db($_baza)) {
  16. $this -> status = true;
  17. $this -> baza = $_baza;
  18. $this -> bazaLink = $wynik;
  19. return true;
  20. } else {
  21. $this -> baza = '';
  22. $this -> bazaLink = false;
  23. return $this -> bladZwroc(__LINE__);
  24. }
  25.  
  26. }
  27. .
  28. .
  29. .
  30. ?>


w drugim pliku Test.php
  1. <?php
  2. include ( 'SQL_CONNECT.inc' );
  3.  
  4. $mysql1 = new SQL_CONNECT('host1','ccccc',fffff','baza1');
  5. $mysql2 = new SQL_CONNECT('host2','dddd','rrrr','baza2);
  6.  
  7. class Test {
  8.  
  9. var $mysql1;
  10. var $mysql2;
  11.  
  12. function Test($mysql1,$mysql2){
  13. $this->mysql1 = $mysql1;
  14. $this->mysql2 = $mysql2;
  15. ......
  16. }
  17.  
  18.  function pobierz(){
  19. $t1= $this->mysql1->sqlHash("select rower from baza1 limit 1"); 
  20. $t2=$this->mysql2->sqlHash("select nazwa from baza2 limit 1");
  21. print_r($t1);
  22. print_r($t2);
  23.  //funkcja sqlHash poprotu wykonuje mysql_query() i zwraca tablice z rekordami 
  24.  .......
  25.  }
  26. ....
  27.  
  28. } //koniec klasy
  29.  
  30. $obj = new Test($mysql1,$mysql2);
  31. $obj->pobierz();
  32. ?>


Problem jest w tym i nie wiem dlaczego tak się dzieje że jak np odpale ten plik Test.php to oczekiwałbym wyswietlenia dwóch tablic z rekordem kazda z innej bazy brana, niestety działanie jest takie ze tylko jedna tablica zostaje zwrocona zamiast kolejnej tablicy z wynikiem dostaje komunikat ze nie ma takiej kolumny.
Oczywiście odpowiednie kolumny w danych bazach sa i teraz np jak zamienie kolejnoscią dwie linijki w taki sposób:

  1. <?php
  2. $mysql2 = new SQL_CONNECT('host2','dddd','rrrr','baza2');
  3. $mysql1 = new SQL_CONNECT('host1','ccccc',fffff','baza1);
  4. ?>


to wówczas otrzymuje znowu jedna tablice z wynikiem tylko tym razem z innej bazy a drugi blad ze nie ma kolumny w bazie.
Zauważyłem że wykonywane poprawnie jest to zapytanie gdzie polaczenie jest na koncu czyli np jesli $mysql1 jest jako drugie w kolejnosci to wlasnie oba zapytania beda wykonane na tek bazie ,jesli z koleji przestawie kolejnosc i dam jako drugie $mysql2 to wowczas z tej walsnie bazy bedzie wkonane dwa zapytania, pomimo tego ze sa osobne dwa polaczenia przypisane do dwóch różnych obiektów.

Dlaczego tak się dzieje? Co zmienić by można bylo bez większych przeróbek zrealizowac polaczenie dwóch tych baz i zapytan by bylo ok.

Zaznaczam ze jest to mocno przerobiony kod ktory w rzeczywistosci jest w aplikacji w celu przedstawienia problemu i uproszczenia maksymalnie ilosci wystepowania plików.

Za wszelkie uwagi i pomoc będę wdzięczny..


p.s. zapomnialem dopisac paru znaków ' , edytowalem posta i poprawialem to ale jakos i tak sie nie zmienia na stronie
pozdro
haryb

Już nieaktualne, znalazłem sam rozwiązanie -> dopisywanie identyfikatora połączenia do mysql_query jak tego nie było a było wiecej połączeń niż jedno, to brał domyślnie ostatni wygenerowany identyfikator.
dr_bonzo
Cytat
Już nieaktualne, znalazłem sam rozwiązanie -> dopisywanie identyfikatora połączenia do mysql_query jak tego nie było a było wiecej połączeń niż jedno, to brał domyślnie ostatni wygenerowany identyfikator.

O czym pisza w manualu, i tak wlasnie ucza marne ksiazki, nie wspominajac o tym parametrze.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.