Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]PDO + cache
Forum PHP.pl > Forum > Przedszkole
!*!
Znalazłem klasę klik to źródła która rozszeża działanie PDO o cachowanie wyników zapytań... Jednak nie mogę użyć w niej bindowania.

  1. $spdo = SPDO::create(''.DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME.'', ''.DB_LOGIN.'', ''.DB_PASS.'', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"), './cache/');
  2. $spdo -> startCache(5, $_GET['article']);
  3. $stmt = $spdo -> prepare('SELECT id, content_'.$lang.' FROM article WHERE id=art', PDO_MYSQL);
  4. $stmt -> bindValue(':art', $_GET['article'], PDO::PARAM_STR);


Co robię źle? Potrafię uzyskać połączenie zwykłe $spdo -> query jednak potrzebne mi jest zbindowanie w zapytaniu.

Istnieją jakieś inne klasy PDO+cache ?
nospor
NIe: id=art
a: id=:art
!*!
Już miałem tak, pojawia się przy tym błąd

Kod
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':art AND n.idarticle=a.id LIMIT 0,1' at line 1


Zamieniłem zapytanie na

Kod
query("SELECT n.link,n.idarticle,a.id,a.content_".$lang." FROM `nav` AS n, `article` AS a WHERE link=':art' AND n.idarticle=a.id LIMIT 0,1");


Jednak z bazy nie jest nic pobierane
nospor
ale :art masz dac przy PREPARE a nie przy QUERY
i nie ':art'
a :art
Juz po takim czasie na forum moglbys wiedziec co to tekst a co nie.
!*!
To już nie wiem co robię źle:

  1. try
  2. {
  3. $spdo = SPDO::create(''.DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME.'', ''.DB_LOGIN.'', ''.DB_PASS.'', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"), './cache/');
  4. $spdo -> startCache(5, $_GET['article']);
  5. $stmt = $spdo -> prepare("SELECT n.link,n.idarticle,a.id,a.content_pl FROM `nav` AS n, `article` AS a WHERE link=:art AND n.idarticle=a.id LIMIT 0,1");
  6. $stmt -> bindValue(':art', $_GET['article'], PDO::PARAM_STR);
  7.  
  8. $rows = $stmt -> fetchAll();
  9.  
  10. $stmt -> closeCursor();
  11. $stmt = null;
  12.  
  13. $spdo -> endCache();
  14. echo '<br/>Pobrane dane w formie tablicy:<br/>';
  15. print_r($rows);
  16. echo $rows['content_'.$lang.''];
  17. }
  18. catch(Exception $e){echo $e->getMessage();}


Dodałem też jako 2 parametr w prepare PDO_MYSQL i nic.
nospor
1) A czym sie teraz objawia to "źle" ?
2) Na czystym PDO to dziala? Jak tak to po grzyba w ogole tę klase bierzesz? uzyj normalnego cache a nie bawisz sie w jakies cuda nie widy winksmiley.jpg
!*!
Źle = nie pobiera danych z bazy.
Tak, na zwykłym PDO działa. A jakie to jest "normalne" cache? Bo chyba nie jestem w temacie biggrin.gif
nospor
Normalne cache? Normalnie - pobierasz dane z bazy sam, np. przy pomocy PDO i sam je cacheujesz. Mozesz do tego uzyc dostepnych w necie klas, np. mojej w podpisie winksmiley.jpg
!*!
W zasadzie racja... przecierz z PDO zapytanie do bazy jest wykonywane dopiero przez $stmt -> execute(); więc przed tym mogę sprawdzić plik... Ehh jakie to proste...
nospor
Cytat
Ale tak to musiałbym przed każdym zapytaniem
To straszne.... winksmiley.jpg
Cytat
. A w tej klasie mam to zapewnione z automatu.
Z automatu to masz zapewnione to, ze ci nie dziala winksmiley.jpg

Ile ty masz tych pobieran ze nagle ci te pare ifow szkodzi?
krzysiek0210
Cytat(!*! @ 21.12.2010, 11:52:18 ) *
Tak, na zwykłym PDO działa.

Może poprzednie błędne zapytanie zapisało Ci pliczek cache z pustymi danymi, i teraz gdy próbujesz pobrać dane ciągnie je z tego pustego pliku zamiast z bazy danych? Spróbuj usunąć plik cache i ponownie wykonać zapytanie.
jx1
a tak przy okazji to w miejscu WHERE link=:art nie powinieneś mieć n.link (i w ogóle pobierasz pole które przy WHERE ustawiasz?)
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.