Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 2 połączenia z bazą
Forum PHP.pl > Forum > Przedszkole
SET
  1. <?php
  2. function lacz_bd()
  3. {
  4.  $wynik = @mysql_pconnect('localhost', 'user', 'haslo'); 
  5.  if (!$wynik)
  6. return false;
  7.  if (!@mysql_select_db('system'))
  8. return false;
  9.  return $wynik;
  10. }
  11.  
  12. function lacz_bd_2()
  13. {
  14.  $wynik = @mysql_pconnect('localhost', 'user', 'haslo'); 
  15.  if (!$wynik)
  16. return false;
  17.  if (!@mysql_select_db('forum'))
  18. return false;
  19.  return $wynik;
  20. }
  21. ?>


sprawdzam połączenia w następujący sposób:
return $wynik; ==> echo $wynik;

pierwsze połączenie działa, drugie już nie ?
(najpierw pobieram kategorie z pierwszej bazy, potem chcę pobrać tematy z drugiej bazy na tej samej stronie)

thx za answers;
rogrog
jeżeli używać kilku połączeń, to przy każdym wywołaniu funkcji mysql_select_db lub mysql_query powinieneś podawać jako parametr ich identyfikatory (zwracane przez funkcję mysql_connect)
SET
  1. <?php
  2. function pobierz_tematy($idforum)
  3. {
  4.  $lacz = lacz_bd_2();
  5.  $zapytanie = &#092;"select *
  6.  from tematy where idforum = '$idforum'&#092;"; 
  7.  $wynik = @mysql_query($zapytanie);
  8.  echo $wynik;
  9.  if (!$wynik)
  10.  return false;
  11.  $ilosc_kat = @mysql_num_rows($wynik);
  12.  if ($ilosc_kat == 0)
  13. return false;
  14.  $wynik = wynik_bd_do_tablicy($wynik);
  15. return $wynik;
  16.  
  17. }
  18. ?>


połączenie zostawiam bez zmian (kod w pierwszym poscie) a tutaj stosuję zamiast
  1. <?php
  2. $wynik = @mysql_query($zapytanie);
  3. ?>
następującą linijkę
  1. <?php
  2. $wynik = @mysql_query($zapytanie, 2);
  3. ?>
ale dalej mam problem, czy o coś takiego Tobie chodziło bo ja nie mam o tym pojęcia ?
tiraeth
dalej źle......

polecam coś takiego:

funkcje:
  1. <?php
  2. function lacz_bd()
  3. {
  4.  $connect = @mysql_pconnect('localhost', 'user', 'haslo');
  5.  if (!$connect)
  6. return false;
  7.  if (!@mysql_select_db('system'))
  8. return false;
  9.  return $connect;
  10. }
  11.  
  12. function lacz_bd_2()
  13. {
  14.  $connect = @mysql_pconnect('localhost', 'user', 'haslo');
  15.  if (!$connect)
  16. return false;
  17.  if (!@mysql_select_db('forum'))
  18. return false;
  19.  return $connect;
  20. }
  21. ?>


pobieranie:
  1. <?php
  2. function pobierz_tematy($idforum)
  3. {
  4.  $polaczenie1 = lacz_bd(); // polaczenie z baza pierwsza
  5.  $polaczenie2 = lacz_bd_2(); // polaczenie z druga
  6.  $zapytanie = &#092;"select *
  7.  from tematy where idforum = '$idforum'&#092;";
  8.  $wynik = @mysql_query($zapytanie, $polaczenie1); // pobiera z bazy dla polaczenia pierwszego
  9. // $wynik = @mysql_query($zapytanie, $polaczenie2); // pobiera z bazy dla polaczenia drugiego
  10.  echo $wynik;
  11.  if (!$wynik)
  12.  return false;
  13.  $ilosc_kat = @mysql_num_rows($wynik);
  14.  if ($ilosc_kat == 0)
  15. return false;
  16.  $wynik = wynik_bd_do_tablicy($wynik);
  17. return $wynik;
  18.  
  19. }
  20. ?>
rogrog
poczytaj w manualu przy funkcjach do mysql o drugich parametrach - zawierają resource, identyfikator połączenia.

Cytat(manual)
Jeżeli identyfikator nie zostanie podany, wykorzystane zostanie ostatnio otwarte połączenie. Jeżeli żadne połączenie nie jest otwarte, funkcja spróbuje je nawiązać wywołując mysql_connect() bez argumentów.


ogólnie to np.


  1. <?php
  2.  
  3. $connection = mysql_connect( 'host', 'login', 'haslo' );
  4. $connection2 = mysql_connect( 'host1', 'login2', 'haslo2' );
  5.  
  6. /* działamy na pierwszym połączeniu */
  7. mysql_select_db( 'nazwa bazy', $connection );
  8. mysql_query( 'SELECT NOW()', $connection );
  9.  
  10. /* działamy na drugim połączeniu */
  11. mysql_select_db( 'nazwa bazy w drugim połączeniu ', $connection2 );
  12. mysql_query( 'SELECT NOW()', $connection2 );
  13.  
  14.  
  15. ?>
SET
Wielkie dzięki, pozdrawiam
hwao
Ja proponuje napisac klasa wtedy wszytko super dziala...

$Db = new DB();
$DB2 = new DB();

A dalej to juz tylko rozbudowac je do Tego co ci potrzben i bezporblmu obsluzysz 1, 2, X baz dabnych
SET
w sumie chyba będe musiał zacząć stosować klasy, z tego co widzę znacznie to upraszcza kod

UPDATE:

napisałem taką klasę:
  1. <?php
  2. class polacz
  3. {
  4. function lacz_bd($param)
  5. {
  6.  $wynik = @mysql_pconnect('localhost', 'user', 'haslo'); 
  7.  if (!$wynik)
  8. return false;
  9.  if (!@mysql_select_db('system'))
  10. return false;
  11.  return $wynik;
  12. }
  13. }
  14. ?>

wywołałem ją tak:
  1. <?php
  2. function pobierz_kategorie()
  3. {
  4.  // zapytanie bazy danych o listę kategorii
  5.  $lacz = new polacz(); //<-ta linijka 
  6.  
  7.  $zapytanie = 'select idkat, nazwa_kat
  8.  from kategorie'; 
  9.  $wynik = @mysql_query($zapytanie);
  10.  if (!$wynik)
  11.  return false;
  12.  $ilosc_kat = @mysql_num_rows($wynik);
  13.  if ($ilosc_kat ==0)
  14. return false;
  15.  $wynik = wynik_bd_do_tablicy($wynik);
  16.  return $wynik; 
  17. }
  18. ?>

dobrze to rozumuje, bo jak narazie to nie działa ?




UPDATE 2:
po całym dniu spędzonym nad połączeniami z MySQL muszę stwierdzić że użycie programowania obiektowego jest kapitalnym rozwiązaniem.
przykładowe rozwiązanie:
  1. <?php
  2. class lacz_bd 
  3. {
  4. var $host;
  5. var $uzytkownik;
  6. var $haslo;
  7. var $nazwa;
  8.  
  9.  
  10.  function baza() 
  11.  {
  12.  $this->host = &#092;"localhost\";
  13.  $this->uzytkownik = &#092;"xx\";
  14.  $this->haslo = &#092;"xx\";
  15.  $this->nazwa = &#092;"xx\"; //nazwa bazy
  16.  }
  17.  
  18.  function baza_2() 
  19.  {
  20.  $this->host = &#092;"localhost\";
  21.  $this->uzytkownik = &#092;"xx2\";
  22.  $this->haslo = &#092;"xx2\";
  23.  $this->nazwa = &#092;"xx2\"; //nazwa bazy
  24.  }
  25.  
  26.  function open() 
  27.  {
  28.  $wynik = mysql_connect($this->host,$this->uzytkownik,$this->haslo);
  29. if (!@mysql_select_db($this->nazwa))
  30. return false;
  31.  return $wynik;
  32.  
  33.  }
  34.  
  35. }
  36. ?>


teraz wywołujemy (połączenie 1) :
  1. <?php
  2.  
  3. $lacz = new lacz_bd();
  4. $lacz->baza();
  5. $lacz->open();
  6. ?>


połączenie 2:
  1. <?php
  2. $lacz = new lacz_bd();
  3. $lacz->baza_2();
  4. $lacz->open();
  5. ?>
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.