Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MEMCACHE] Świrujący memcache
Forum PHP.pl > Forum > PHP
servs
Witam,

Mam problem z memcahce, otóż;
Kod wygląda tak:
  1. if ($get_result = $memcache->get('scm_'.$search))
  2. {
  3. $r = $get_result->int_attr;
  4. }else{
  5. $sql = $db->query('SELECT COUNT(*) AS records FROM music WHERE title LIKE "%'.$search.'%"');
  6. $r = $db->fetch_row($sql);
  7. $tmp_object = new stdClass;
  8. $tmp_object->str_attr = 'scm_'.$search;
  9. $tmp_object->int_attr = $r;
  10.  
  11. $memcache->set('scm_'.$search, $tmp_object, false, 604800) or die ('Nie udało się zapisać elementu');
  12. }


Jeżeli $search nosi np. 'lady pank', 'coma' czy coś tam, wszystko działa świetnie.
Natomiast jak wprowadzę do $search np. 'ksu', 'big cyc', wywala mi
Cytat
Fatal error: Call to a member function get() on a non-object in /home/user/domains/domain.pl/public_html/mem.php on line 19


W linii 19 jest początek if'a. Wcześniej nie mam nic z memcache.

Jeżeli ktoś miał już z tym problem, lub w ogóle wie o co tu chodzi, to będę dźwięczny za podpowiedź co tu zrobić.

Pozdrawiam,
Bartek.
leafnode
Taki komunikat oznacza, że $memchache to nie jest obiekt połączenia. Przed if'em sprawdzaj czy połączenie zostało poprawnie nawiązane, a jak nie - sprawdź czemu nie udało się.

ln.
servs
Jak memcache nie jest połączony, to od razu mi wyskakuje komunikat o błędzie, więc na pewno trybi.
Z resztą, tak jak piszę, error wyskakuje mi tylko na określone frazy.
gothye
objekt przed zapisem do cache pownieneś serializować lubz zmienić na tablice
servs
@gothye, nigdy mi się wcześniej coś takiego o uszy nie obiło.
Dane do memcache muszą być specjalnie przygotowane?
Jeśli możesz, to opowiedz coś o tym, albo podaj jakieś rzetelne źródło wiedzy na ten temat. Bo ja w sumie potrafię tylko się łączyć, rozłączać, zapisywać, pobierać, więc dopiero się uczę tej memsztuki wink.gif
gothye
najpierw określ z jakiej biblioteki korzystasz do obsługi memcache (jakiś framework ?)
servs
Żadnych frameworków nie mam.
Wrzucam po prostu zwykłe polecenia z dokumentacji memcache http://php.net/manual/en/book.memcache.php
Wersja memcache 1.4.5
Tyle wiem.

Przy odczytywaniu znalazłem coś takiego (w manualu)
  1. $cache->get(array('one', 'two'))


To jest ta serializacja, czy chodzi o wyciąganie dwóch rekordów na raz?
Sorry za takie pytania, ale pytałem wyroczni google, ale raz mówi tak, raz inaczej i już sam nie wiem. Wolę się spytać kogoś, kto miał z tym doświadczenie.
gothye
przy zapisie obiektu : serialize($tmp_object) ; przy odczycie $tmp_object = unserialize($memcache->get(tmp_object );
servs
Wygląda to teraz tak
  1. if ($get_result = unserialize($memcache->get('scm_'.$search)))
  2. {
  3. $r = $get_result->int_attr;
  4. }else{
  5. $sql = $db->query('SELECT COUNT(*) AS records FROM music WHERE tytul LIKE "%'.$search.'%"');
  6. $r = $db->fetch_row($sql);
  7. $tmp_object = new stdClass;
  8. $tmp_object->str_attr = 'scm_'.$search;
  9. $tmp_object->int_attr = $r;
  10.  
  11. $memcache->set('scm_'.$search, serialize($tmp_object), false, 604800) or die ('Nie udało się zapisać elementu');
  12. }

I dalej nie działa.
Po wpisaniu do $search 'big cyc' wywala błąd. A już jak jest 'big cycu' to już bez błędu leci.
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.