Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO i odzyskiwanie danych zwróconych przez procedurę
Forum PHP.pl > Forum > Bazy danych > MySQL
mar'kem
Nie wiem czemu, ale kiedy wywołuję procedurę przez PDO nie zwraca mi zmiennej OUT. Sama procedura jest w porządku - uruchamiałem w phpMyAdmin i z konsoli i wszystko było ok.

  1. <?php
  2. $db = new PDO(HOST, USER, PASS);
  3. $stmt= $db->prepare('CALL rejestr_dublikaty (:typ, :nazwa, :message);');
  4. $stmt->bindParam(':typ', $typ);
  5. $stmt->bindParam(':nazwa', $nazwa);
  6. $stmt->bindParam(':message', $nic, PDO::PARAM_STR, 4000);
  7.  
  8. $stmt->execute();
  9.  
  10. print '$nic';
  11. ?>


  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `rejestr_dublikaty`(typ CHAR(5), nazwa CHAR(20), OUT message CHAR(8))


Wyświetla mi pustą stronę sad.gif Nie mam pojęcia co jest źle
SongoQ
  1. <?php
  2. $stmt= $db->prepare('CALL rejestr_dublikaty (:typ, :nazwa, :message)');
  3. ?>


Chyba o to mu chodzi (byl srednik w zapytaniu) i wlacz pokazywanie bledow.
mar'kem
Usunąłem średnik ale nic się nie zmieniło.

A pokazywanie błędów mam włączone (nawet próbowałem przypisać błędne parametry to dostawałem info co jest źle i można było szybko poprawić - tu nie wiem co nie gra - dla parsera wszystko wygląda wszystko ok skoro o niczym nie pisze :/)
SongoQ
To cos z bledami jest nie tak bo jesli bylo by ok to by sie skrypt nie konczyl, bo w Twoim przypadku jak pisales dostajesz biala strone a powinno Ci wypisać $nic, chyba ze tak pisze a nie napisales o tym.

Jak wypisujesz zmienna to powinno byc bez apostrofow. czyli print $nic
To moze inaczej dopisz do funkcji mysqla cos co by modyfikowalo rekord i sprawdz czy wewnetrznie zadzia.
mar'kem
Cytat
Jak wypisujesz zmienna to powinno byc bez apostrofow. czyli print $nic

W oryginale są " " - tutaj mi dziwnie kolorowało kod więc zmieniłem, żeby się lepiej czytało winksmiley.jpg (sprawdziłem też bez cudzysłowów - nic nie zmieniło :/)
Cytat
To moze inaczej dopisz do funkcji mysqla cos co by modyfikowalo rekord i sprawdz czy wewnetrznie zadziała.

Dodałem insert, uruchomiłem procedurę przez PDO, nie zadziałało... Następnie napisałem to samo w phpMyAdmin i wszystko wyszło ok. Czyli coś z wywoływaniem procedury w skrypcie pokopałem. Ale co?
SongoQ
Dziwne przyklad jest taki jak w manualu tylko zamiast : przez ? bind robiony. Powienien jakis blad wywalic. Sprawdz jeszcze co daje print_r($stmt);

Napisz jeszcze jakiej wersji uzywasz bo masa bledow byla/jest z tym zwiazana.
mar'kem
Cytat
Dziwne przyklad jest taki jak w manualu tylko zamiast : przez ? bind robiony.

Przez ? bind też próbowałem - takie same rezultaty.
Cytat
Sprawdz jeszcze co daje print_r($stmt);

Zwraca informacje o obiekcie:
PDOStatement Object ( [queryString] => CALL rejestr_dublikaty(:typ, :nazwa, :message) )

Wersja MySQLa: 5.0.37

A propos przykładu z manuala - tamtego też próbowałem (dla pewności po prostu go skopiowałem, stworzyłem też odpowiednią procedurę w MySQLu zwracającą jedną wartość) - rezultaty były takie same jak tutaj :/
SongoQ
Ok a wersja PHP?
mar'kem
PHP Version 5.2.1
DeyV
zrób jeszcze

  1. <?php
  2. $db-> $this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  3. ?>


Pewnie baza wywala jakiś błąd, którego nawet nie zauważasz.
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.