Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Cachowanie zapytan PDO
kamilDarzecki
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 28.11.2011

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Obiektu PDO nie zserializujesz, bo się nie da. Jeśli chcesz zapisać rezultat do pliku, sprowadź go do postaci tablicy i ją zserializuj.
Go to the top of the page
+Quote Post
Wave
post
Post #3





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Może SQL_CACHE?
Go to the top of the page
+Quote Post
by_ikar
post
Post #4





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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());
Go to the top of the page
+Quote Post
kamilDarzecki
post
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 28.11.2011

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


  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 ?
Go to the top of the page
+Quote Post
by_ikar
post
Post #6





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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 (IMG:style_emoticons/default/wink.gif)
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: 23.08.2025 - 16:58