Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] stored procedures
Forum PHP.pl > Forum > Przedszkole
jastu
Napisałem kilka procedur by zwiększyć przejrzystość bazy i aplikacji w kontekście najbliższych zmian ale .... nie mogę tych procedur uruchamiać z poziomu php.

Poszukałem i znalazłem kilka niedzialających w moim przypadku rozwiązań:



1.Sposób połączenia z bazą (nie wiem co oznacza flaga 131074)
  1. <?php
  2. mysql_connect($this->hostname, $this->username, $this->password, 131074);
  3. ?>

nie pozwala wywołać
  1. <?php
  2. mysql_query(' set names "utf-8" ');
  3. ?>

ponieważ
Kod
<p>Error Number: 2014</p><p>Commands out of sync; you can't run this command now</p>


2. Łączymy się typowo
  1. <?php
  2. mysql_connect($this->hostname, $this->username, $this->password);
  3. ?>

i wtedy
Kod
Error Number: 1312

PROCEDURE db_core_.getForumLast can't return a result set in the given context


Na serwerze nie ma mysqli !
a nie chcę przenosić tych procedur do php ze względu na ich skomplikowanie. Jeśli jest komuś znane rozwiązanie tego problemu to bedę przesadnie wdzięczny. Pzdr
drPayton
1. Flaga 131074 używana jest by zapobiec generowaniu niektórych błędów podczas wywoływania procedur, a ściślej jest to oznaczenie liczbowe następującej kombinacji flag: CLIENT_FOUND_ROWS | CLIENT_MULTI_RESULTS

"Commands out of sync; you can't run this command now". Błąd ten oznacza, że wywołujesz funkcje w niewłaściwej kolejności. Może tu chodzić o niewłaściwie skonstruowaną procedurę lub też o wywoływane w nieodpowiedniej kolejności zapytania sql. Łącząc się w taki sposób nie możesz, na przykład, wywołać fetch_arraya przed selectem etc. Być może set names musi być wykonywane bezwzględnie jako pierwsze, ale jak napisałem, błąd może być w jakiejś Twojej procedurze.

2. "can't return a result set in the given context" - patrz punkt pierwszy winksmiley.jpg
jastu
Witam,
dzięki za zainteresowanie i naświetlenie problemu. Drążąc problem dalej, doszedłem do wniosku że w aplikacji która podczas odsłony wali do bazy 20 zapytań mógł wystąpić problem kolejności w jakiej mogły być wykonane. Od czego zależy ten kontekst wykonania zapytania ? Poniżej zamieszczam kod, który zwraca identyczne błędy jak aplikacja a wykonuje tylko jedno zapytanie. Problem nadal istnieje worriedsmiley.gif Procedura działa prawidłowo w pozostałych klientach.

  1. <?php
  2. $con = mysql_connect('localhost', 'root', 'pass');
  3.  
  4. $res = mysql_db_query('selected_db', 'call procedure(1)',$con);
  5.  
  6. var_dump($res); // false
  7.  
  8. echo mysql_error(); // PROCEDURE selected_db.procedure can't return a result set in the given context
  9.  
  10. while($res = mysql_fetch_array($res,MYSQL_ASSOC))
  11. {
  12. var_dump($res); // tu wiadomo że już nic nie będzie ;)
  13. }
  14. ?>


Ekhm... czy u wszystkich działa tylko u mnie nie chce ?
drPayton
Z tego co zrozumiałem googlując, by wywoływać procedury musisz ustawić tą flagę przy łączeniu z bazą, w przeciwnym wypadku te błędy (context) będą się pojawiać... A kolejność zapytać, jeśli jest niewłaściwa, generuje ten drugi błąd o którym pisałeś
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.