Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO - zwracanie wynikow
Forum PHP.pl > Forum > PHP
wiewiorek
Funkcja closeCursor() zamyka zbiór wyników i musi być wywolana po wykonaniu zapytania (funkcja query()). To napisałem klasę wykorzystującą PDO - tylko mam problem z metodą zapytanie() tej klasy - przekazuję do niej zapytanie, a ona ma zwracać wynik. Na stronie wikibooks znalazłem taki przykład:
http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO
  1. $stmt = $pdo -> query('SELECT id, nazwa, opis FROM produkty');
  2. echo '<ul>';
  3. foreach($stmt as $row)
  4. {
  5. echo '<li>'.$row['nazwa'].': '.$row['opis'].'</li>';
  6. }
  7. $stmt -> closeCursor();
  8. echo '</ul>';
  9.  


A ja nie chcę od razu wyświetlać przy użyciu metody klasy wyniku, bo raz będę potrzebował wyświetlić wynik w postaci listy, innym razem w tabeli itd.
A tak jak mam obecnie czyli:
  1. $wynik = $this->pdo->query($z);
  2. $wynik -> closeCursor();
  3. return $wynik;


to przez closeCursor() wywolanym zaraz po query() przed wyswietleniem wynikow zapytania nic w rezultacie nie otrzymuje i nic nie jest potem wyswietlane. Co moge zrobic ?
Oto moj caly kod:

  1. class Polaczenie {
  2.  
  3. private $pdo;
  4. private $dsn = 'mysql:host=localhost;dbname=baza';
  5. private $uzytkownik = 'root';
  6. private $haslo = '';
  7.  
  8. public function __construct() {
  9. try {
  10. $this->pdo = new PDO($this->dsn, $this->uzytkownik, $this->haslo, array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8"));
  11. $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  12. }
  13. catch(PDOException $e) {
  14. echo '<p>Polaczenie nie moglo zostac utworzone: '.$e->getMessage().'</p>';
  15. }
  16. }
  17.  
  18. public function __destruct() {
  19.  
  20. }
  21.  
  22. public function zapytanie($z) {
  23. try{
  24. $wynik = $this->pdo->query($z);
  25. $wynik -> closeCursor();
  26. return $wynik;
  27. }
  28. catch(PDOException $e) {
  29. echo '<p>blad w metodzie zapytanie: '.$e->getMessage().'</p>';
  30. }
  31. }
  32. }
  33.  
  34.  
  35. $polaczenie = Polaczenie();
  36. $rezultat = $polaczenie->zapytanie("SELECT * FROM ksiazki");
  37. foreach($rezultat as $wiersz)
  38. {
  39. echo $wiersz['id'].'<br/>';
  40. }
nospor
- pobierz dane do tablicy
- zrob closeCursor
- zwroc tablice
wiewiorek
No wiec zgodnie z przykladami na tej stronie: http://www.digipedia.pl/php/function.pdost...t-fetchall.html
zrobilem:
  1. $wynik = $this->pdo->exec($z);
  2.  
  3. $wynik_tablica = $wynik->fetchAll(); //dodalem to
  4.  
  5. $wynik -> closeCursor();
  6. return $wynik_tablica;


Jednak:
  1. $rezultat = $polaczenie->pobieranieDanych("SELECT * FROM ksiazki ORDER BY id ASC");
  2. print_r($rezultat);


Zwraca:
PDOStatement Object ( [queryString] => SELECT * FROM ksiazki ORDER BY id ASC )

Dlaczego ? Na tamtej stronie przeciez zwraca tablice.
Kasyx
PDO::exec() nie służy do pobierania wartości, a do zapytań typu INSERT, DELETE etc. Zwraca liczbę zmienionych wierszy, stad moze być ten problem

Użyj PDO::query()
wiewiorek
Ups - w swojej klasie mialem jeszcze druga metode do aktualizacji danych i zamiast zrobic to zo wyzej w metodzie do pobierania danych to robilem to w tej drugiej - nie zauwazylem ;] Dzieki, czyli powinno byc tak:

  1. public function pobieranieDanych($z) {
  2. try{
  3. $wynik = $this->pdo->query($z);
  4. $wynik_tablica = $wynik->fetchAll();
  5. $wynik -> closeCursor();
  6. return $wynik_tablica;
  7. }
  8. catch(PDOException $e) {
  9. echo '<p>blad w metodzie pobieranieDanych(): '.$e->getMessage().'</p>';
  10. }
  11. }


i potem:
  1. $rezultat = $polaczenie->pobieranieDanych("SELECT * FROM ksiazki");
  2. foreach($rezultat as $wiersz)
  3. {
  4. echo $wiersz['id'].' '.$wiersz['tytul'].'<br/>';
  5. }
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.