Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MS SQL to MySQL
Forum PHP.pl > Forum > PHP
MrTomAsh
Witam,

klient zlecił mi stworzenie strony internetowej gdzie m.in. będą wyświetlane informacje które zostaną pobrane z jego prywatnego serwera. Nie byłby problemu gdyby nie fakt, że dane są magazynowane w MS SQL.

Niestety funkcja mssql_connect nigdzie mi nie działa (na żadnym serwerze) więc raczej to odpada.

Nie mogę znaleźć żadnego darmowego lub taniego programu do tworzenia i codziennej aktualizacji bazy MySQL na podstawie MS SQL. Byłoby to dla mnie najprostsze rozwiązanie.

Może macie jakieś doświadczenie z bazami MS SQL i komunikacją z nimi (ja w ogóle nie mogę sobie poradzić z tym).

Proszę o pomoc.

P.S. Guglam od dwóch dni, ale nic co by rozwiązywało mój problem nie znalazłem.
P.S.2 Istnieje jakiś webowy interfejs MS SQL który można by na zwykłym Apache'u postawić?
by_ikar
Jakiś rok temu borykałem się z podobnym problemem, rozwiązałem go tak, że w asp napisałem aplikacje która mi zrobiła "eksport" danych, jakimiś tam partiami, do pliku sql, który potem sobie importowałem do mysqla. Największa bolączka to kodowanie, dlatego utworzenie takiego zrzutu to jest IMO najlepsze wyjście.
MrTomAsh
A nie masz gdzieś takiego skrypciku? Bardzo by mi pomógł i rozwiązał całą bolączkę.
by_ikar
No wiesz, to było w sumie pisane od ręki i to ponad półtora roku temu.. Wątpię abym gdzieś to miał. Generalnie po przeczytaniu kilku tutków z asp, sam będziesz w stanie napisać sobie taką aplikacje która ci całość "wyświetli" jako sql, lub zapisze jako plik sql'owy. Osobiście zapisywałem jako plik wink.gif
IceManSpy
Pobierz sobie MS SQL server: http://www.microsoft.com/sqlserver/en/us/e...ns/express.aspx
I działaj na bazie lokalnie. Tylko niech Ci da strukturę tabel i najlepiej jakieś dane testowe.
Przenoszenie danych z My na MS może być dobre w przypadku małych baz, które nie muszą być na bieżąco aktualizowane. Ale jeśli dane z prywatnego serwera muszą być takie same jak na stronie to takie przenoszenie wykończy serwer.
MrTomAsh
Mam strukturę i testową bazę (każdy klient ma osobną w MS SQL) - baza jednak okazała się nie pełna - nie wszystkie dane się wyeksportowały.
Mam zassanego SQL Server'a, ale nie mogę tego ogarnąć. Jako ktoś kto operuje przede wszystkim na MySQL jest ona... dziwna. Pomoc w konfiguracji mile widziana.
Próbowałem wczoraj jeszcze doinstalować sobie funkcję mssql_connect, ale sypie mi błędami coś przy instalacji.

Ergo - jedyne wyjście to przyśpieszony kurs ASP i napisanie czegoś na szybko w tym języku do obsługi tej bazy?
by_ikar
Możesz spróbować np tego: http://dev.mysql.com/get/Downloads/MySQLGU...m.edu.pl/mysql/ w paczce masz mysql migration toolkit. Wiem że kiedyś próbowałem tego użyć, ale za każdym razem miałem błędy w połączeniu. Nie wiem czy wtedy miałem źle skonfigurowany sql serwer, czy coś innego było powodem, czas naglił a trzeba było to rozwiązać, więc nie było czasu na sprawdzanie i szukanie innego rozwiązania.

Jeżeli ci to nie pomoże, możesz jeszcze spróbować w PDO połączyć się z mssql, i poprzez PDO insertem wrzucać dane do mysql'a. W moim przypadku PDO również miał problemy z połączeniem..
CuteOne
Dawnymi czasy przy pisaniu stronki do pewnej gierki zrzucałem dane z MSSQL do MySQL w bardzo prosty sposób (wręcz prymitywny ;P)

Napisz skrypt, który na serwerze klienta zrzuci baze do pliku .txt (ewentualnie kompresja .zip - znacząco zmniejszy wielkość pliku) i wyśle ją za pomocą ftp_ na właściwy serwer. Następnie rozpakuj -> wrzuć dane do bazy...

ps. nie ma problemu z kodowaniem jeżeli postępujesz zgodnie z manualem mssql smile.gif
MrTomAsh
@CuteOne, a w czym ten skrypt napisać? W PHP? To jak zmusić XAMPP'a do obsługi mssql? Po odhashowaniu mssql w php.ini wywala mi całego Apacha. A ASP.NET musiałbym się douczyć, bo jeszcze się nie bawiłem.
CuteOne
zapis pliku (plik na serwerze z bazą mssql)
  1. // tutaj łączymy się z mssql
  2.  
  3. // pobieramy dane
  4. $mssql_query= mssql_query("SELECT * FROM cos");
  5.  
  6. while($row = mssql_fetch_assoc($mssql_query)) {
  7.  
  8. $jsonArray[] = $row;
  9. }
  10.  
  11. file_put_contents('zrzut_mssql.txt', json_encode($jsonArray));
  12.  
  13. // kompresja, laczenie przez ftp i wysylka na serwer


odbiór pliku:
  1. if(file_exists('zrzut_mssql.txt')) {
  2.  
  3. $content = file_get_contents('zrzut_mssql.txt');
  4.  
  5. if($content !== FALSE) {
  6.  
  7. $daneJson = json_decode($content, true);
  8.  
  9. // petla i tworzenie z danych zapytania sql dla MySQL
  10. }
  11. }
MrTomAsh
Doradź proszę jakąś dobrą paczkę typu XAMPP na Windowsa z obsługą właśnie MS SQL? Albo jakaś dobra instrukcja jak dobrze skonfigurować taki serwer (mam z tym tylko podstawowe doświadczenia).

Rozwiązanie:

http://www.microsoft.com/web/platform/phponwindows.aspx

Pobieramy WebMatrix, PHP, sterownik do MS SQL, ISS i co tam potrzebne może jeszcze być...

Otwieramy WebMatrix -> Projekt -> Włączamy obsługę PHP.

Funkcja sqlsrv_connectexclamation.gif

I klepiemy:
  1. <?php
  2.  
  3. //Ustawienie połączenia
  4. $serverName = "(local)";
  5. $connectionOptions = array("Database"=>"baza");
  6. // Łączenie przy użyciu uwierzytelniania systemu Windows.
  7. $conn = sqlsrv_connect( $serverName, $connectionOptions);
  8. if( $conn === false )
  9. { FormatErrors( sqlsrv_errors() ); exit(); };
  10.  
  11.  
  12. /*
  13.  * zwykle zapytanie
  14.  */
  15.  
  16. $query = "SELECT * FROM tabela'";
  17. $sql = sqlsrv_query($conn, $query);
  18. $result = sqlsrv_fetch_object($sql);
  19.  
  20. /*
  21.  * i mamy $result jako obiekt. Można też pobrać jako tablicę.
  22.  * zapis do pliku, zgodnie z radą @CuteOne
  23.  */
  24.  
  25. while( $obj = sqlsrv_fetch_array( $sql)) {
  26. $jsonArray[$table][] = $obj;
  27. }
  28.  
  29. file_put_contents("pliki.txt",json_encode($jsonArray));
  30.  
  31. ?>


Może komuś się przyda wink.gif

Teraz mam kolejny problem.
Potrzebuje albo te pliki albo wysłać na serwer, albo je udostępnić, aby serwer mógł je pobrać. Ale nie bardzo wiem jak wysłać je (zakładam, że POSTem) lub udostępnić - nie potrafię konfigurować Windowsa jako serwer zewnętrzny, a lecąc po tutkach z sieci mi nie wychodzi...
CuteOne
wystarczyło zainstalować pierwszy lepszy WAMP - xampp, webserv itp.

udostepniasz wrzucajac pliki do folderu ze stronka (pod webserv jest to folder httpd)

ps. a nie mogłeś połączyć się z bazą MSSQL z serwera strony?
Fifi209
Cytat(CuteOne @ 14.02.2012, 19:23:38 ) *
ps. a nie mogłeś połączyć się z bazą MSSQL z serwera strony?

Zwykle bazy danych są zabezpieczone przed połączeniami z zewnątrz, jedynie localhost
prachwal
na MSSQL-u robisz linked serwer do MySQL-a za pomocą ODBC

a później to już jest prosto

insert into openquery(mysql,'select * from tabela where 1=0') (pole1, pole2, pole3)
select pole1, pole2, pole3 from tabela

nie ma potrzeby angażowania PHP do synchronizacji, wystarczy tego typu konstrukcja

a jak podepniesz do triggerów albo to jakiego sheulder-a to masz prawie online

CuteOne
fifi209: jasne ale zmiana kilku ustawień to raczej nie problem :| nawet zapyziały MSS 2005 posiada remote controll czy jak to tam nazwali...

ps. <a href="http://support.microsoft.com/kb/914277" target="_blank">http://support.microsoft.com/kb/914277</a>
Fifi209
Cytat(CuteOne @ 15.02.2012, 22:35:36 ) *
fifi209: jasne ale zmiana kilku ustawień to raczej nie problem :|

Szczególnie dla hostingów współdzielonych
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.