Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Cachowanie zapytan PDO
Forum PHP.pl > Forum > PHP
kamilDarzecki
Mam problem z zapisaniem do pliku rezultatu zapytania PDO. Zawsze robiąc to tak że używałem na rezultacie serialize() i zapisywalem do pliku, niestety z tego co właśnie zauważyłem nie działa mi to z PDO. Ponieważ zwróconego obiektu PDO nie można zserializować. Da sie to jakoś obejsc i posłużyć się którąś z wbudowanych metod PDO by przetworzyć to zapytanie tak aby dalo sie je cachować ? Lub macie może jakieś inne pomysły ? Prosił bym o pomoc.
Cysiaczek
Obiektu PDO nie zserializujesz, bo się nie da. Jeśli chcesz zapisać rezultat do pliku, sprowadź go do postaci tablicy i ją zserializuj.
Wave
Może SQL_CACHE?
by_ikar
Wykonanie zapytanie w PDO, zwraca obiekt PDOStatement, bezpośrednio nie możesz przecież i tak wyświetlić tych danych, do tego używasz jednej z metody PDOStatement: fetch, fetchAll. W ten sposób otrzymujesz wynik w postaci tablicy, którą dalej możesz już serializować. Zamiast robić tego tak:

Kod
<?php

$query = $pdo->query('SELECT * FROM tabela ORDER BY id DESC');
$cache = serialize($query);


spróbuj zrobić to tak:

Kod
<?php

$query = $pdo->query('SELECT * FROM tabela ORDER BY id DESC');
$cache = serialize($query->fetchAll());
kamilDarzecki
  1. $query = $pdo->query('SELECT * FROM tabela ORDER BY id DESC');
  2. $cache = serialize($query->fetchAll());

Działa!
Tylko teraz w dalszej czesci kodu gdzie zamykam obiekt funkcja closeCursor()
wywala mi błąd:
  1. Fatal error: Call to a member function closeCursor() on a non-object in C:\xampp\htdocs\projekt\views\frontend\default\news\index.php on line 25

Rozumiem że w momencie wykonania funkcji fetchAll() na obiekcie PDO nie trzeba juz później wykonywać closeCursor() tak ?
by_ikar
Oj musisz jeszcze poczytać o PDO. Widzisz, w PDO nie można zagnieżdżać zapytań, po zakończeniu pobierania danych z każdego zapytania, musisz je zamknąć metodą closeCursor. A wyglądać będzie to tak:

  1. <?php
  2.  
  3. $query = $pdo->query('SELECT * FROM tabela ORDER BY id DESC');
  4. $cache = serialize($query->fetchAll());
  5. $query->closeCursor();


Ogólnie polecam ci poczytać albo dokumentacje albo chociażby na wikibooks: http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO wpis nawet chyba jednego z użytkowników tego forum wink.gif
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.