Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql/php]Połączenia z kilkoma bazami jednocześnie
mruwek
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 24.08.2007

Ostrzeżenie: (0%)
-----


Mój skrypt do wykonania potrzebuje danych z kilku baz. Schemat wygląda tak:

  1. <?php
  2. $link_A = mysql_connect('localhost', 'user_A', 'pass_A');
  3. $A = `jakiś fragment skryptu potrzebujący połączenia z bazą \"A\"`;
  4. mysql_close($link_A);
  5.  
  6. $link_B = = mysql_connect('localhost', 'user_B', 'pass_B');
  7. $B = `jakiś fragment skryptu potrzebujący połączenia z bazą \"B\"`;
  8. mysql_close($link_B);
  9.  
  10. $link_A = mysql_connect('localhost', 'user_A', 'pass_A');
  11. $A = `jakiś fragment skryptu potrzebujący ponownie połączenia z bazą \"A\"`;
  12. mysql_close($link_A);
  13. ?>


Moje pytanie brzmi czy nie można jakoś inaczej przełączać się między tymi bazami, niż za każdym razem zamykając i otwierając połączenie? Teoretycznie jeśli poda się te same argumenty dla "mysql_connect, to nie wywołuje on nowego połączenia, a tylko ponownie używa już wywołane. Czytałem jednak na php.net, że jeśli między 2 połączeniami o takich samych argumentach (czytaj - do tej samej bazy), znajdzie się połączenie o innych argumentach, to zostanie wywołane nowe połączenie zamiast wznowienia.

Sumując: W chwili obecnej (zgodnie z zaprezentowanym schematem) skrypt wywołuje 3 połączenia SQL (2 do bazy "A" i 1 do bazy "B"). Chciałbym zamiast tego wywoływać 2 połączenia. Jakieś pomysły??

Ten post edytował mruwek 24.08.2007, 18:35:20
Go to the top of the page
+Quote Post
lopik
post
Post #2





Grupa: Zarejestrowani
Postów: 340
Pomógł: 0
Dołączył: 7.07.2006

Ostrzeżenie: (0%)
-----


A sprawdzałeś jak to jest, gdy podasz czwarty argument funkcji mysql_connect() ?

Ja tak jeszcze nie robiłem, więc nie wiem.

Ten post edytował lopik 24.08.2007, 19:44:37
Go to the top of the page
+Quote Post
Kicok
post
Post #3





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


A musisz zamykać połączenie za każdym razem, gdy zmieniasz bazę? Czemu nie możesz korzystać z 2 połączeń równolegle?

  1. <?php
  2.  
  3. $link_A = mysql_connect( 'localhost', 'user_A', 'pass_A' );
  4. mysql_select_db( 'baza_A', $link_A );
  5.  
  6. $link_B = mysql_connect( 'localhost', 'user_B', 'pass_B' );
  7. mysql_select_db( 'baza_B', $link_B );
  8.  
  9.  
  10.  
  11. // Zapytanie 1 (baza: baza_A)
  12. $result1 = mysql_query( 'SELECT * FROM tabela1', $link_A ) or die( mysql_error( $link_A ) );
  13.  
  14. // Zapytanie 2 (baza: baza_B)
  15. $result2 = mysql_query( 'SELECT * FROM tabela2', $link_B ) or die( mysql_error( $link_B ) );
  16.  
  17. // Zapytanie 3 (baza: baza_A)
  18. $result3 = mysql_query( 'SELECT * FROM tabela1', $link_A ) or die( mysql_error( $link_A ) );
  19.  
  20.  
  21.  
  22. mysql_close( $link_A );
  23. mysql_close( $link_B );
  24.  
  25. ?>
Go to the top of the page
+Quote Post
mruwek
post
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 24.08.2007

Ostrzeżenie: (0%)
-----


Prawie działa.

Mówię prawie, bo nie działa mi ta opcja przy stosowaniu funkcji. Gdy w skrypcie jest jakieś zwykłe zapytanie, które odnosi się do bazy, to bez problemu wszystko działa. Gdy jest to jednak zapytanie tworzone w funkcji includowanej z innego pliku to nie wiedzieć czemu nie działa.

Przykład:
index.php (fragment)
  1. <?php
  2. $site_conn = mysql_connect('localhost', 'user_A', 'pass_A);
  3. if (!$site_conn) 
  4.  {
  5. echo "Nie udało się nawiązać połączenia z serwerem.";
  6. exit;
  7.  }
  8. mysql_select_db('baza_A, $site_conn);
  9.  
  10. require_once $include_path."/include/class_mysql.php";
  11. ?>


I oto w class_mysql.php znajdujemy coś takiego:
  1. <?php
  2. function query($query_string) {
  3. $this->result = mysql_query($query_string);
  4. $this->query_count++;
  5. if (!$this->result) {
  6. $this->sql_error("Query Error");
  7. }
  8. return $this->result;
  9. }
  10. ?>


Zmieniłem to oczywiście na:
  1. <?php
  2. function query($query_string) {
  3. $this->result = mysql_query($query_string, $site_conn);
  4. $this->query_count++;
  5. if (!$this->result) {
  6. $this->sql_error("Query Error");
  7. }
  8. return $this->result;
  9. }
  10. ?>


No i niestety nie działa. Wywala nic ciekawego - "Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in ..."

Jaka jest tego przyczyna?
Go to the top of the page
+Quote Post
mwojcik
post
Post #5





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.07.2007

Ostrzeżenie: (0%)
-----


Cytat(mruwek @ 27.08.2007, 01:14:40 ) *
Prawie działa.

Mówię prawie, bo nie działa mi ta opcja przy stosowaniu funkcji. Gdy w skrypcie jest jakieś zwykłe zapytanie, które odnosi się do bazy, to bez problemu wszystko działa. Gdy jest to jednak zapytanie tworzone w funkcji includowanej z innego pliku to nie wiedzieć czemu nie działa.

Przykład:
index.php (fragment)
  1. <?php
  2. $site_conn = mysql_connect('localhost', 'user_A', 'pass_A);
  3. if (!$site_conn) 
  4.  {
  5. echo "Nie udało się nawiązać połączenia z serwerem.";
  6. exit;
  7.  }
  8. mysql_select_db('baza_A, $site_conn);
  9.  
  10. require_once $include_path."/include/class_mysql.php";
  11. ?>


I oto w class_mysql.php znajdujemy coś takiego:
  1. <?php
  2. function query($query_string) {
  3. $this->result = mysql_query($query_string);
  4. $this->query_count++;
  5. if (!$this->result) {
  6. $this->sql_error("Query Error");
  7. }
  8. return $this->result;
  9. }
  10. ?>


Zmieniłem to oczywiście na:
  1. <?php
  2. function query($query_string) {
  3. $this->result = mysql_query($query_string, $site_conn);
  4. $this->query_count++;
  5. if (!$this->result) {
  6. $this->sql_error("Query Error");
  7. }
  8. return $this->result;
  9. }
  10. ?>


No i niestety nie działa. Wywala nic ciekawego - "Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in ..."

Jaka jest tego przyczyna?



Chyba zapomniales 2 argumentu dla funkcji :
  1. <?php
  2. function query($query_string, $site_conn) {
  3. $this->result = mysql_query($query_string, $site_conn);
  4. $this->query_count++;
  5. if (!$this->result) {
  6. $this->sql_error("Query Error");
  7. }
  8. return $this->result;
  9. }
  10. ?>
Go to the top of the page
+Quote Post
mruwek
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 24.08.2007

Ostrzeżenie: (0%)
-----


Tak, masz rację. Prócz tego powinienem jeszcze zglobalizować $site_conn. Teraz już działa.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 12:49