Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP+MS SQL] Jak zrobić zapytanie do zlinkowanej bazy danych
emjot27
post
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 4.06.2007

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


Mam taką sytuacje. Robię zaliczenie na studiach z rozproszonych baz danych. Muszę połączyć, ze sobą 2 serwery baz mySQL z jednym serwerem MS SQL. Po z linkowaniu w MS SQL Query Analizer w taki sposób:
  1. exec sp_addlinkedserver
  2. @server='mysql1',
  3. @srvproduct='MSDASQL',
  4. @provider='MSDASQL',
  5. @provstr='driver={MySQL ODBC 3.51 Driver};Server=stacja1;Port=3306;Database=zaliczenie;Uid=root;Pwd='

i podobnie z drugim serwerem. Jeżeli wykonam zapytanie w SQL Query Analizerze takie jak to:

  1. SELECT * FROM openquery(stacja1, 'select * from kontrahenci')

Wszystko jest ok, czyli połączenie działa a dane z zewnętrznej bazy pobiera prawidłowo. Teraz, jednak chciałbym zrobić coś takiego samego ale przy użyciu PHP. Zacząłem kombinować, i wymyśliłem coś takiego:

  1. <?php
  2.  $conn = mssql_connect("host", "user", "haslo")
  3.    or die('nie dało się połączyć');
  4.  
  5. $zapytanie= mssql_query("select * from openquery(stacja1, 'select * from kontrahenci')");
  6. $wyswietl = mssql_query($zapytanie, $conn);
  7. while($wiersz_sel = mssql_fetch_array($wyswietl))
  8. {
  9.    echo $wiersz_sel['nazwa'].'<br>';
  10. }
  11. ?>


Niestety dostaję błąd:

Warning: MS SQL message: Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query. (severity 16) in c:\phpdev\www\mssql.php on line 7

Czy ktoś ma pomysł, jak to zrobić?
Go to the top of the page
+Quote Post
deirathe
post
Post #2





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


Ale chyba tutaj bazy nie wybrałeś, zaraz po polączeniu wykonujesz zapytanie
  1. <?php
  2. mssql_select_db("zaliczenie",$conn);
  3. ?>


Ten post edytował deirathe 24.05.2009, 20:27:20
Go to the top of the page
+Quote Post
emjot27
post
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 4.06.2007

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


Hej, Dzięki za odpowiedź, ale to nie to. Nie mogę się tutaj łączyć z bazą zaliczenie, gdyż jest ona fizycznie na zewnętrznym serwerze mySQL a w MS SQLu jest jedynie link do niej(tzw. "Linked Servers"), dlatego gdy zrobię tak jak piszesz, zwróci mi komunikat:

Warning: MS SQL message: Could not locate entry in sysdatabases for database 'zaliczenie'. No entry found with that name. Make sure that the name is entered correctly. (severity 16) in c:\phpdev\www\mssql.php on line 4

Jakieś pomysły? ;>
Go to the top of the page
+Quote Post
deirathe
post
Post #4





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


Troszkę poszperałem i:
http://support.microsoft.com/kb/296769/en-us

Niby to bug samej bazy mssql musisz włączyć, na ON NASI_NULLS, chociaż szczerze nigdy tym się nie zajmowałem, jeżeli to nie pomoże a znajdziesz rozwiązanie, to daj znać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
emjot27
post
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 4.06.2007

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


Hej, też to znalazłem, ale nic to nie pomogło. Zrobiłem test, i wyszukałem dane z bazy która jest na tym serwerze w MS SQLu i udało się. Tak więc, połączenie z MS SQLem działa prawidłowo. Problem tkwi raczej w zapytaniu w momencie gdy chcę pobrać dane ze z linkowanej bazy. Jest może na to jakaś metoda?

EDIT:

No to wykombinowałem. Teraz działa wyśmienicie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

  1. <?php
  2.  $conn = mssql_connect("host", "user", "haslo")
  3.    or die('nie dało się połączyć');
  4.   mssql_select_db("master", $conn)
  5.    or die("nie dało się wybrać bazy");
  6. $zapytanie = mssql_query("set ansi_nulls ON") ;
  7. $zapytanie = mssql_query("set ANSI_warnings ON") ;
  8. $zapytanie = "select * from openquery(stacja1, 'select * from kontrahenci')";
  9. $wyswietl = mssql_query($zapytanie, $conn);
  10. while($wiersz_sel = mssql_fetch_array($wyswietl))
  11. {
  12.    echo $wiersz_sel['nazwa'].'<br>';
  13. }
  14. mssql_close($conn);
  15. ?>


Witam ponownie.
Kontynuując temat chciałem się zapytać, jaka jest składnia jeśli chcemy dodać nowy rekord w podlinkowanej w MSSQL baze mysql po przez PHP. W necie znalazłem coś takiego:

  1. INSERT INTO OPENQUERY(rftest1, 'SELECT field1, field2, fieldN FROM aqua.aqua.itin) SELECT field1, field2, fieldN FROM sqlTable WHERE ...continue WHERE


lub podobnie

  1. INSERT INTO db2..itin SELECT A.*
  2. FROM openquery(rftest1, 'select * from aqua.aqua.itin') AS A


No i nie bardzo rozumiem tą składnie ale domyślam się, że przy użyciu takiego zapytania to uzupełniam jakąś tabelę wg danych z innej tabeli. Mi natomiast chodzi o to, że chcę dodać konkretny rekord tak jak to robi się przy użyciu składni wykorzystywanej w MySQLu.
  1. <?php
  2. mysql_query("INSERT INTO example
  3. (name, age) VALUES('Sandy Smith', '21' ) ")
  4. ?>


Próbowałem zrobić podobnie jak w przypadku selecta do zlinkowanej bazy, ale nie działa:

  1. <?php
  2. INSERT INTO openquery(stacja1, 'INSERT INTO kontrahenci' (nazwa,miasto,ulica) VALUES ('Ania Frania','Warszawa','Dworcowa')";
  3. ?>


EDIT:
Ok znalazłem błąd trzeba było dodać * w zapytaniu i działa:

  1. <?php
  2. INSERT INTO openquery(stacja1, 'INSERT * INTO kontrahenci' (nazwa,miasto,ulica) VALUES ('Ania Frania','Warszawa','Dworcowa')";
  3. ?>

Pozdrawiam.

Ten post edytował emjot27 1.06.2009, 07:51:12
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: 23.08.2025 - 23:56