Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql] stored procedures, jak uruchomić i pobrać wynik uruchomienia
jastu
post
Post #1





Grupa: Zarejestrowani
Postów: 382
Pomógł: 0
Dołączył: 29.11.2005
Skąd: :jestem();

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
drPayton
post
Post #2





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował drPayton 29.08.2007, 16:13:21
Go to the top of the page
+Quote Post
jastu
post
Post #3





Grupa: Zarejestrowani
Postów: 382
Pomógł: 0
Dołączył: 29.11.2005
Skąd: :jestem();

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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 ?

Ten post edytował jastu 29.08.2007, 23:20:34
Go to the top of the page
+Quote Post
drPayton
post
Post #4





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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ś

Ten post edytował drPayton 30.08.2007, 09:11:40
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.08.2025 - 17:16