Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MSSQL][PHP]Łączenie z dwoma bazami na raz POMOCY
Artur_R
post
Post #1





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

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


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. ?>


Ten post edytował Artur_R 24.11.2013, 13:20:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
ctom
post
Post #2





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

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


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');
Go to the top of the page
+Quote Post
Artur_R
post
Post #3





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

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


też tak próbowałem i nie pomogło
Go to the top of the page
+Quote Post
ctom
post
Post #4





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

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


no to musisz zmodyfikować swoją classe i uwzględnić new_link ( man )
Go to the top of the page
+Quote Post
Artur_R
post
Post #5





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

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


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ł(IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Turson
post
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Wydaje mi się, że lepiej operować na samych $this->db i $this->db2 a do konstruktora nic nie przekazywać.
Go to the top of the page
+Quote Post
Artur_R
post
Post #7





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

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


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.......
Go to the top of the page
+Quote Post
Turson
post
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  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ź
Go to the top of the page
+Quote Post
Artur_R
post
Post #9





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

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


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