Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MSSQL][PHP]Łączenie z dwoma bazami na raz POMOCY
Artur_R
post 24.11.2013, 13:04:50
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
ctom
post 24.11.2013, 13:56:09
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');


--------------------
Polecam MyDevil hosting idealny dla deweloperów
Go to the top of the page
+Quote Post
Artur_R
post 24.11.2013, 14:10:33
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 24.11.2013, 14:22:14
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 )


--------------------
Polecam MyDevil hosting idealny dla deweloperów
Go to the top of the page
+Quote Post
Artur_R
post 25.11.2013, 18:08:32
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łquestionmark.gif
Go to the top of the page
+Quote Post
Turson
post 25.11.2013, 19:22:41
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 25.11.2013, 20:16:40
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 25.11.2013, 20:22:51
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 25.11.2013, 20:27:24
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:34