Procedura MSSQL wywołanie przez php |
Procedura MSSQL wywołanie przez php |
22.06.2012, 11:31:27
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 1.12.2011 Ostrzeżenie: (0%) |
Witam.
Walczę od kilku godzin z pewną procedurą skladowaną MS SQL Ma za zadanie w przypadku update'u tabeli_1 stworzyć kopie rekordu + guid+ date w tabela_2
Oraz kod PHP, którym staram sie wywołać procedurę:
Ma ktoś jakiś pomysł co robię źlę. Dodam, żę procedura wywołana w consoli SQl wykonuje sie prawidłowo, strona z kodem PHP tez nie zwraca błedów ale efektów w tabeli wciaz brak |
|
|
22.06.2012, 11:35:26
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
sqlsrv_execute też może zwrócic false, ale ty już tego nie sprawdzasz ani nie wyświetlasz błędu gdy ten false sie pojawi
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.06.2012, 12:28:00
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 1.12.2011 Ostrzeżenie: (0%) |
sqlsrv_execute też może zwrócic false, ale ty już tego nie sprawdzasz ani nie wyświetlasz błędu gdy ten false sie pojawi Słuszna uwaga -zmęczenie dało chyba znac o sobie. Po sprawdzeniu co zwraca sqlserv_execute() otrzymuję taki oto błąd
Posprawdzałem jakie wartości przekazuje w parametrach jest ok, pozmieniałem typy zmiennych i nic, wciąz ten sam błąd. |
|
|
22.06.2012, 12:47:58
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
1) var_dump($C_1);
co ci zwraca? 2) Czemu do parametrów zapodajesz & ? zle podajesz parametry. z manuala http://nl3.php.net/manual/en/function.sqlsrv-prepare.php Cytat An array with this structure: array($value [, $direction [, $phpType [, $sqlType]]]) Ma to być tablica parametrów, gdzie każda jej wartosc to znowu tablica z wartoscią parametru oraz ewentualnie innymi rzeczami.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.06.2012, 16:02:32
Post
#5
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 1.12.2011 Ostrzeżenie: (0%) |
1) var_dump($C_1); co ci zwraca? string(10) "poprawną_wartość_zmiennej" Cytat(nospor) 2) Czemu do parametrów zapodajesz & ? W przeciwnym wypadku otrzymuję błąd:
Cytat(nospor) zle podajesz parametry. z manuala http://nl3.php.net/manual/en/function.sqlsrv-prepare.php Ma to być tablica parametrów, gdzie każda jej wartosc to znowu tablica z wartoscią parametru oraz ewentualnie innymi rzeczami. Zgodnie z manualem array$params ($value [, $direction [, $phpType [, $sqlType]]]) - trzy ostatnie zmienne sa opcjonalne a pierwsza ($value) może być przekazana min. jako zmienna $zmienna co właśnie uczyniłem - ja tak to odczytuje? Jeżeli, któryś z parametrów jest niezbędny, lub źlę coś interpretuje proszę o uwagę. |
|
|
22.06.2012, 19:00:19
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
Cytat Zgodnie z manualem array$params ($value [, $direction [, $phpType [, $sqlType]]]) - trzy ostatnie zmienne sa opcjonalne a pierwsza ($value) może być przekazana min. jako zmienna $zmienna co właśnie uczyniłem - ja tak to odczytuje? Wg tego zapisu co ci przytoczyłem w manualu to powinna to być tablica a nie wartosc. Czyli nie: $C_1 = ($_POST[C_1]); a: $C_1 = array($_POST[C_1]); Analogicznie reszta parametrów. Spróbuj, może zadziała -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
25.06.2012, 08:17:17
Post
#7
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 1.12.2011 Ostrzeżenie: (0%) |
Po zmianie $C_1 na tablicę
var_dump($C_1) zwraca poprawne wartości w postaci ale pojawi się w tym momencie inny problem z komunikatem:
|
|
|
25.06.2012, 08:24:09
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
No coż, komunikat ten sam.... z racji, że nie używam mssql, więc nie jestem w stanie ci już nic więcej pomóc. W zgodzie z manualem wszystko wydaje się być ok.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
25.06.2012, 10:08:40
Post
#9
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 1.12.2011 Ostrzeżenie: (0%) |
No coż, komunikat ten sam.... z racji, że nie używam mssql, więc nie jestem w stanie ci już nic więcej pomóc. W zgodzie z manualem wszystko wydaje się być ok. Dzięki za dotychczasowe uwagi. Walczę dalej bo problem wciążnie rozwiązany...nie wierzę też, że nikt na formu nie wywoływał proceduiry składowanej mssql z poziomu php! Może ktoś się znajdzie, kto miał podobny pronlem... |
|
|
25.06.2012, 12:07:11
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) |
Wydaje się ,że musisz użyć mechanizmów bindowania parametrów które będą rozpoznawane wewnątrz procedury składowanej .
Tutaj masz przykład: http://php.net/manual/en/function.mssql-execute.php W szególności patrz na polecenie: mssql_bind(); Poza tym odwołujesz się do procedury składowanej poprzez polecenie mssql_init(); Czyli twoje zapytanie powinno wyglądać: $stmt = mssql_init('NazwaProcedurySkładowanej', $NazwaPołączenia_z_bazą danych); mssql_execute($stmt); Odwołujesz się bezpośrednio do procedury składowanej ,która wykonuje pewne zadania.Jak obecnie ty to robisz?Na moje oko przykład,który ty przedstawiłeś ,bardziej pasowałby do trigera after update, gdzie wykonujesz pewne zadanie na konkretną tabelę i wyzwalasz tzw.trigger. Ten post edytował Niktoś 25.06.2012, 12:22:26 |
|
|
25.06.2012, 12:30:52
Post
#11
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 1.12.2011 Ostrzeżenie: (0%) |
Mam dostep do serwera na którym znajduje się PHP Version 5.3.6
Nie mam dostępu do do sterownika obsługującego funkcje z przedrostkiem mssql_.... nowy sterownik umożliwia wykorzystanie wyłacznie funkcji z przedrostkiem sqlsrv_....... Zatem zostaje sqlsrv_prepare and sqlsrv_execute tylko, że coś nie gra |
|
|
25.06.2012, 12:33:19
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) |
mssql_execute
(PHP 4 >= 4.0.7, PHP 5, PECL odbtp >= 1.1.1); No to obsługuje niższe wersje PHP niż Ty masz. Musisz zrozumieć ,że musisz w jakiś dostępny sposób odwoływać się w zapytaniu sql bezpośrednio do nazwy procedury składowanej w twojej bazie danych. Nie mam doświadczenia w PHP+ MSSQL, ale c#+MSSQL, i tam odwołujesz się w zapytaniach bezpośrednio do nazwy procedury składowanej zastosowanej w twojej bazie danych. Ten post edytował Niktoś 25.06.2012, 12:37:20 |
|
|
25.06.2012, 12:55:11
Post
#13
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 1.12.2011 Ostrzeżenie: (0%) |
mssql_execute (PHP 4 >= 4.0.7, PHP 5, PECL odbtp >= 1.1.1); No to obsługuje niższe wersje PHP niż Ty masz. MS SQL Server 2008 R2 + PHP 5.3.6 (pełen zestaw) - brak dostępu do funkcji mssql itd. Cytat(Niktoś) Musisz zrozumieć ,że musisz w jakiś dostępny sposób odwoływać się w zapytaniu sql bezpośrednio do nazwy procedury składowanej w twojej bazie danych. Nie mam doświadczenia w PHP+ MSSQL, ale c#+MSSQL, i tam odwołujesz się w zapytaniach bezpośrednio do nazwy procedury składowanej zastosowanej w twojej bazie danych. Staram się to zrozumieć i wykorzystać dostępne środki czyli kombinację funkcji sqlsrv_prepare() oraz sqlsrv_execute(). Do procedury odwołuję sie po nazwie (zmiena $sql), dalej staram sie przekażać odpowiednie parametry ($params) i tutaj zaczynają sie schody. NIe potrafię do procedury przekazać parametrów z odpowiednimi wartościami. |
|
|
Wersja Lo-Fi | Aktualny czas: 21.09.2024 - 20:14 |