Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Microsoft SQL Server / MSDE _ połączenie i wykonywanie zapytań mssql na windowsie i ubuntu

Napisany przez: qoonieczko 8.02.2016, 12:28:42

Witam,

Czy zna ktoś jakiś sposób, żeby można było łączyć się, wykonywać zapytania w kodzie itd. w identyczny lub chociaż bardzo podobny sposób na windowsie i na linuxie(ubuntu)? Wychodziłem z założenia, że na win będę korzystał z biblioteki sqlsrv, a na ubuntu z dblib i wtedy różnica byłaby w jednej funkcji, w jednym pliku:
na win:
$dsn = "sqlsrv:Server=10.1.1.25\\instancja;Database=baza";
na ubuntu:
$dsn = "dblib:Server=10.1.1.25\\instancja;Database=baza";

To nawet działało, ale jak przeniosłem aplikację z win na ubuntu to okazało się, że dblib resetuje fetch'a, który wyświetla coś z bazy jeśli wewnątrz jest jakiś inny fetch. Dokładnie problem jest opisany tutaj:
https://bugs.php.net/bug.php?id=65945

Raczej tego nie obejdę wiec szukam innego sposobu. Ogólnie chce robić sobie na lokalnym serwerze na windowsie, bo mi tak wygodniej i szybciej i potem gotowca przerzucić na serwer ubuntu. Potrzebuję sposobu, żeby w trakcie przerzucania nie wymagał wielu zmian, a najlepiej żadnych. Ma ktoś jakiś pomysł?

Napisany przez: nospor 8.02.2016, 12:46:00

Podalem juz ci pomysl - napisz inaczej ten kod.
Sam przyznajesz, ze ten blad jest nie do obejscia, wiec musisz poprawic ten kod.

Napisany przez: qoonieczko 8.02.2016, 12:56:04

No, ale liczę, że może jest jakiś inny sposób:) Nie podoba mi się perspektywa ładowania wszystkiego do tablic, wygodnie mi się tak pisze i wolałbym raz zmienić sposoby połączenia i wywoływania zapytań, ale żebym mógł sobie robić podzapytania w pętli innego zapytania. Oporny jestem- wiem... Pewnie jak nic nie znajdę to będę musiał robić tak jak pisałeś, ale będzie to dla mnie trudne, bo będę musiał zmienić nawyki:P

Napisany przez: nospor 8.02.2016, 13:05:26

Cytat
bo będę musiał zmienić nawyk
Tak czy siak wypadaloby zmienic nawyki, bo kod co tam strzeliles to przyklad tego jak nie nalezy pisac... Pisalem ci juz, ze to sie robi jednym zapytaniem przy pomocy LEFT JOIN a nie zapetlaniem zapytan. zapetlanie zapytan to najgorsze na co mogles wpasc.

Napisany przez: qoonieczko 8.02.2016, 13:26:18

To był przykład napisany na szybko, żeby uświadomić na czym polega problem. Czasami ciężko jest nie zrobić zapytania w zapytaniu. Na takiej samej zasadzie działają zazwyczaj procedury SQL'owe. Najpierw masz cursor, potem jedziesz po tym i wykonujesz różne działania, zapytania. Zapytań wykonuje się dokładnie tyle samo co w przypadku użycia tablicy. Co więcej masz w tym przypadku dodatkowe działania, bo najpierw musisz wrzucić dane do tablicy, a potem foreach, żeby na niej zadziałać. A tak to wszystko robię podczas fetchowania. Może się mylę, ale póki co takie jest moje rozumowanie:) Rozumiem, że Tobie bardziej chodzi o to, że oba sposoby są złe i najlepszy byłby left join, ale mam takie zagwozdki, że nie da rady wyciągnąć tego jednym zapytaniem.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)