Sqlsrv php driver a @decalre

Mam problem z wywołaniem zapytania sql z poziomu php wykorzystując sterownik bazy MSSQL ze strony

http://www.microsoft.com/downloads/en/d … ae6cf2ca05

mianowicie zapytanie takie jak np.

DECLARE @tabelka TABLE(id int,nazwa varchar(255))

insert into @tabelka(id,nazwa) values (1,‘aaa’),(2,‘bbb’)

select * from @tabelka

zwraca pusty wynik, gdzie jest problem ?

U mnie sekwencja zapytań działa. Jak to wykonujesz w PHP?

a wykorzystujesz do wykonania tego zapytania sterownik który podałem … wykonuję to (w uproszczeniu oczywiście) tak

$db=new PDO( ‘sqlsrv:server=serwer; Database=baza, user, haslo’);

$zap=$db->query("

DECLARE @tabelka TABLE(id int,nazwa varchar(255))

insert into @tabelka(id,nazwa) values (1,‘aaa’),(2,‘bbb’)

select * from @tabelka

");

$zap=$zap->fetchAll();

Nie sprawdzałem tego z PDO, bo nie mam pod ręką serwera z aktywnym PDO. Ale wyrażenie jest, zgodnie z Twoimi oczekiwaniami, poprawne. Działa z poziomu C# i z poziomu management console. Problemem wydaje się być to, że niektóre moduły PHP (np. mysql) nie pozwalają na więcej niż jedno zapytanie w ramach jednego wywołania *_query. Prawdopodobnie o to samo się rozbijasz. Użyj SP, żeby obejść to ograniczenie.

To to że jest poprawne wiem :stuck_out_tongue_winking_eye: bo działa w SQLManagmentStudio Pytanie tylko jak obejść to w PHP z PDO, bo co prawda w standardowym mssql_query też jest Ok ale trochę zależy mi na PDO tym bardziej że podobnych zapytań będzie prawdopodobnie więcej.

Próbowałem z sqlsrv_query i też nie działało. Wychodzi zatem na to, że moduły MSowe nie pozwalają na wykonanie więcej niż jednego zapytania w query. :slight_smile:

Co miałeś na myśli ?

Napisz procedurę składowaną i wywołuj ją. W niej umieszczasz tyle podzapytań, ile dusza zapragnie (no ok, w granicach rozsądku) i z *_query wywołujesz SP przy pomocy exec. Ma to oczywiście wady (aktualizacja kodu i SP w sposób zsynchronizowany jest lekko uciążliwa), ale zalety (m.in. prędkość działania) je IMO rekompensują.

to chyba odpada, tak jak pisałem wyżej będę miał trochę takich zapytań i po jakimś czasie ogarniecie tego to będzie nie lada wyczyn, pozostaje chyba tylko transakcja SQL w postaci zapytanie SQL ->wynik do tablicy w PHP -> zapytanie SQL z danymi z tablicy.

tak czy inaczej dzienx za pomoc

Cały DP jest na SP. Da się, to nie jest wcale aż takie straszne. :slight_smile: Jestem wręcz zdania, że wplatanie zapytań SQL w normalny kod jest wątpliwym rozwiązaniem. :wink: