Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MSSQL][PHP]Łączenie z dwoma bazami na raz POMOCY
Forum PHP.pl > Forum > Przedszkole
Artur_R
Witam

Muszę jednocześnie odwołać się do dwóch różnych baz znajdujących się na tym samym serwerze dodam ze pracuję na ms sql.
Wygląda to mniej więcej tak:

<?php
require_once('class/mssql.class.php');


$baza2 = new MsSQL('BAZA_1');

$select = "select * from .......";

$wynik = $baza2->select_query($select);
zwórcone dane jeszcze obraciam i teraz zaczynają się schody...

unset($baza2);
$baza3 = new MsSQL('BAZA_1');
$baza_mssql = new MsSQL('BAZA_2');

poniżej wykonywana jest pętla która pobiera dane obrobione z pierwszego selecta wykonuje inserty do BAZA_2 jeszcze musi pobrać dodatkowe dane z BAZA_1 by uzupełnić inserty o aktualne dane. I tu zaczynają się problemy ponieważ tą klasę którą mam napisaną łączy się jedynie z JEDNĄ BAZĄ czyli połączenia są nadpisywane w tej kolejności połączeń jak jest pokazane wyżej połączenie z BAZA_1 nie istnieje. Poniżej załączyłem całą klasę która łączy się z bazą:

Zrobiłem jeszcze jedną rzecz skopiowałem tą klasę pod inną nazwą ale też nie pomogło jako zupełnie inny plik też nic. Jest jakiś sposób by to zrobić?

  1. <?php
  2.  
  3. class Mssql
  4. {
  5. private $db;
  6.  
  7. //Konstruktor ustanawia połączenie z bazą danych
  8. //Jeśli połączenie zostanie nawiązane to zwraca wartość true,
  9. //w przeciwnym razie wartość false
  10. public function __construct($dbname='podabna nazwa na sztywno', $pass='podabna nazwa na sztywno', $user='podabna nazwa na sztywno', $host='podabna nazwa na sztywno')
  11. { //echo $dbname;
  12. $this->db = mssql_connect($host, $user, $pass);
  13.  
  14. if($this->db)
  15. {
  16. if(mssql_select_db($dbname, $this->db))
  17. return true;
  18. }
  19. else
  20. return false;
  21.  
  22. }
  23. //Metoda kończy połączenie z bazą danych
  24. public function __destruct()
  25. {
  26. mssql_close($this->db);
  27. }
  28.  
  29. public function ZamknijPolaczenie()
  30. {
  31. mssql_close($this->db);
  32. }
  33. //Metoda wykonująca zapytania insert, update, delete
  34. //Argumenty: Jako argument przyjmuje zapytanie SQL
  35. //Metoda zwraca rezultat wykonania zapytania
  36. public function query($query_str)
  37. {
  38. //echo $query_str.'<br/>';
  39. $rezult = mssql_query($query_str, $this->db);
  40. return $rezult;
  41. }
  42. //Metoda wykonująca zapytanie select
  43. //Argumenty: zapytanie SQL
  44. //Metoda zwraca tablicę z danymi jeśli takowe istnieją, lub NULL w przeciwnym
  45. //wypadku
  46. public function select_query($zapytanie)
  47. {
  48. //echo $zapytanie.'<br/>';
  49. $w = mssql_query($zapytanie, $this->db);
  50. while($row = mssql_fetch_assoc($w))
  51. {
  52. $return[] = $row;
  53. }
  54. unset($row);
  55. return $return;
  56. }
  57.  
  58. }
  59.  
  60. class Mssql2
  61. {
  62. private $db;
  63.  
  64. //Konstruktor ustanawia połączenie z bazą danych
  65. //Jeśli połączenie zostanie nawiązane to zwraca wartość true,
  66. //w przeciwnym razie wartość false
  67. public function __construct($dbname='podabna nazwa na sztywno', $pass='podabna nazwa na sztywno', $user='podabna nazwa na sztywno', $host='podabna nazwa na sztywno')
  68. { //echo $dbname;
  69. $this->db = mssql_connect($host, $user, $pass);
  70.  
  71. if($this->db)
  72. {
  73. if(mssql_select_db($dbname, $this->db))
  74. return true;
  75. }
  76. else
  77. return false;
  78.  
  79. }
  80. //Metoda kończy połączenie z bazą danych
  81. public function __destruct()
  82. {
  83. mssql_close($this->db);
  84. }
  85.  
  86. public function ZamknijPolaczenie()
  87. {
  88. mssql_close($this->db);
  89. }
  90. //Metoda wykonująca zapytania insert, update, delete
  91. //Argumenty: Jako argument przyjmuje zapytanie SQL
  92. //Metoda zwraca rezultat wykonania zapytania
  93. public function query($query_str)
  94. {
  95. //echo $query_str.'<br/>';
  96. $rezult = mssql_query($query_str, $this->db);
  97. return $rezult;
  98. }
  99. //Metoda wykonująca zapytanie select
  100. //Argumenty: zapytanie SQL
  101. //Metoda zwraca tablicę z danymi jeśli takowe istnieją, lub NULL w przeciwnym
  102. //wypadku
  103. public function select_query($zapytanie)
  104. {
  105. //echo $zapytanie.'<br/>';
  106. $w = mssql_query($zapytanie, $this->db);
  107. while($row = mssql_fetch_assoc($w))
  108. {
  109. $return[] = $row;
  110. }
  111. unset($row);
  112. return $return;
  113. }
  114.  
  115. }
  116. ?>
ctom
Cytat(Artur_R @ 24.11.2013, 13:04:50 ) *
Kod
$baza3 = new MsSQL('BAZA_1');
$baza_mssql = new MsSQL('BAZA_2');


ale inicjujesz z jednej klasy ... czasami nie powinno być tak:

Kod
$baza3 = new MsSQL('BAZA_1');
$baza_mssql = new MsSQL2('BAZA_2');
Artur_R
też tak próbowałem i nie pomogło
ctom
no to musisz zmodyfikować swoją classe i uwzględnić new_link ( man )
Artur_R
Przerobiłem to tak:

  1. class Mssql
  2. {
  3. private $db;
  4. private $db2;
  5.  
  6.  
  7. public function __construct($dbname, $dbname2, $pass='cos', $user='cos', $host='cos')
  8. { echo $dbname.$dbname2;
  9. $this->db = mssql_connect($host, $user, $pass, TRUE);
  10. $this->db2 = mssql_connect($host, $user, $pass, TRUE);
  11.  
  12. if($this->db)
  13. {
  14. if(mssql_select_db($dbname, $this->db))
  15. return true;
  16. }
  17. else {
  18. return false;
  19. }
  20.  
  21. if($this->db2)
  22. {
  23. if(mssql_select_db($dbname2, $this->db2))
  24. return true;
  25. }
  26. else {
  27. return false;
  28. }
  29. }
  30. //Metoda kończy połączenie z bazą danych
  31. /* public function __destruct()
  32.   {
  33.   mssql_close($this->db);
  34.   }
  35.  
  36.   public function ZamknijPolaczenie()
  37.   {
  38.   mssql_close($this->db);
  39.   }*/
  40. //Metoda wykonująca zapytania insert, update, delete
  41. //Argumenty: Jako argument przyjmuje zapytanie SQL
  42. //Metoda zwraca rezultat wykonania zapytania
  43. public function query($query_str)
  44. {
  45. $rezult = mssql_query($query_str, $this->db);
  46. return $rezult;
  47. }
  48.  
  49. public function query2($query_str)
  50. {
  51. $rezult = mssql_query($query_str, $this->db2);
  52. return $rezult;
  53. }
  54. //Metoda wykonująca zapytanie select
  55. //Argumenty: zapytanie SQL
  56. //Metoda zwraca tablicę z danymi jeśli takowe istnieją, lub NULL w przeciwnym
  57. //wypadku
  58. public function select_query($zapytanie)
  59. {
  60. $w = mssql_query($zapytanie, $this->db);
  61. while($row = mssql_fetch_assoc($w))
  62. {
  63. $return[] = $row;
  64. }
  65. unset($row);
  66. return $return;
  67. }
  68.  
  69. public function select_query2($zapytanie)
  70. {
  71. $w = mssql_query($zapytanie, $this->db2);
  72. while($row = mssql_fetch_assoc($w))
  73. {
  74. $return[] = $row;
  75. }
  76. unset($row);
  77. return $return;
  78. }
  79. }


odwołuje się do konstruktowa w ten sposób :

$baza2 = new MsSQL("BAZA1", "BAZA2");
sprawdziłem przekazuje parametry ale dalej jest wykonywane zawsze pierwsze połączenie. Selecty dla drugiego połączenia zostają bez echa.....
Nie wiem jak to zrobić... Ma ktoś jakiś pomysłquestionmark.gif
Turson
Wydaje mi się, że lepiej operować na samych $this->db i $this->db2 a do konstruktora nic nie przekazywać.
Artur_R
Przypisałem nawet na sztywno obie baz do db i db2 i dalej łączy się tylko z pierwszą bazą drugą pomija..... Mógłbym prosić o jakiś przykład bo już rozkładam ręce pomału.......
Turson
  1. public function __construct() {
  2. $this->db = //połączenie z bazą 1
  3. $this->db2 = //połączenie z bazą 2
  4. }
  5. function baza1(){
  6. //jakieś zapytanie z użyciem $this->baza
  7. }
  8. function baza2(){
  9. //jakieś zapytanie z użyciem $this->baza2
  10. }

Sprawdź
Artur_R
w ten sposób nie próbowałem zaraz to sprawdzę dzięki za podpowiedź :-)
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.