Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] unset i ilosc zapytan do bazy danych
Forum PHP.pl > Forum > Przedszkole
tommy4
Mam 2 pytania:

1)
Co daje unset. Wiem, że dzięki temu zwalnia się pamięć, ale np. czy coś mi to da, jeżeli pod koniec wykonywania skryptu dołącze coś takiego:
  1. <?php
  2. foreach(array_keys(get_defined_vars()) as $var)
  3. {
  4. unset($$var);
  5. }
  6. unset($var);
  7. ?>

I czy pozostawione zmienne, np. $db_password można jakoś odczytać, itd. z pliku .php, czy nie muszę się martwić o wyjście zmiennych.

2)
Hmm, ilość zapytań do bazy danych. Istnieje coś takiego na forach np. phpbb, ze wyswietla ilosc zapytan do bazy danych. No ok, ale jak to jest liczone? bo jak jest np. 30 zapytan gora na takim forum, to nie wiem ile jest np. w moim cms-ie. ohmy.gif Hmm, dajmy na to, ze jest taki skrypt:
  1. <?php
  2. $sql = "SELECT * FROM news";
  3. $sqlq = @mysql_query($sql);
  4. if($sqlq)
  5. {
  6. while($row = @mysql_fetch_array($sqlq))
  7. {
  8. $content = $row['content'];
  9. $author = $row['author'];
  10. $sql2 = "SELECT * FROM users WHERE id = $author";
  11. $sqlq2 = @mysql_query($sql2);
  12. if($sqlq2)
  13. {
  14. $author = @mysql_fetch_assoc($sqlq2);
  15. $nick = $author['nick'];
  16. }
  17. else
  18. {
  19. [.....blebleble....]
  20. }
  21. }
  22. }
  23. else
  24. {
  25.  [..............blebleble...........]
  26. }
  27. ?>

No wiec odnosnie tego mam takie jedno big pytanie. Skoro dla kazdego newsa wykonuje zapytanie o autora, tzn. ze jezeli mam 100 newsów to wykonuję dodatkowych 100 zapytan? Czyli powinienem miec wyswietlone 1xx zapytan do sql? A moze mozna jakos inaczej rozwiazac pobieranie autora przez jakies zaawansowane zapytanie do sql?
Kod pisany od reki, ale mam nadzieje, ze rozumiecie o co chodzi;d

Dziękuję z góry za odpowiedzi:)
Cysiaczek
Oczywiście, że nie robisz stu zapytań, tylko jedno. Za jednym zamachem wybierasz np. 100 rekordów i potem jes sobie wyświetlasz. Trzeba umiejętnie skonstruowac zapytanie do DB i zrobić je wtedy, gdy masz maksymalnie dużo informacji o tym, co powinieneś ująć w takim zapytaniu. Wszystko to oczywiście można zrobić tak jak mówisz - czyli przez 100 zapytań, ale wydaje mi się to raczej błędem przedszkolnym.

Zmienna jak usuniesz, to po prostu aktualnie wykonywany proces jej nie ma i tyle. Zawsze ktoś może sobie w ramach "testowania serwera na błędy" obejrzeć twoje pliki smile.gif
nasty
Co do unset:
teraz we wszystkich nowoczesnych jezykach progrogramowania wysokiego stopnia, jest takie cos jak "Garbage Collector", jet to odpowirdzialne za zwalnianie pamieci w miare mozliwosci, nie bede sie rozpisywal za bardzo ale streszcze ci co sie dzieje w php:
W php kazda zmienna,obiekt ma tykie cos jak ilosc powiazan (reference count), co znaczy "ile zeczy jest zalezne od tej zmiennej/objektu", jak ten refference count staje sie rowny = 0 to zmienna / object jest automatycznie zwalnianie z pamieci, i niema podszeby robienia unset, bo wychodzi na jedno. Ale tylko jak masz na mysli zwolnic pamiec.
mike
Cytat(nasty_psycho @ 10.07.2006, 09:52 ) *
W php kazda zmienny,obiekt ma tykie cos jak ilosc powiazan (reference count), co znaczy "ile zeczy jest zalezne od tej zmiennej/objektu", jak ten refference count staje sie rowny = 0 to zmienna / object jest automatycznie zwalnianie z pamieci, (...)
Nie prawda.
Tak jest w Javie, ale nie w php.
W php jak ilośc powiązań jest równ zero to zmienna może być usunięta ale kiedy to nastapi to zależy od "widzimisie" Garbage Collectora.

Cytat(nasty_psycho @ 10.07.2006, 09:52 ) *
(...) i niema podszeby robienia unset, bo wychodzi na jedno.
unset() jest często opowiedzią w sytuacji kiedy chcesz mieć kontrolę nad tym kiedy zaminna m być usunięta. sam o tym decydujesz, więc na pewno nie wychodz na jedno.
Na przykład: Jak masz jakieś operacje w destruktorze klasy to za cholerę nie przewidzisz kiedy to się wykona. No chyba że użyjesz unset()
nasty
1)
Cytat
unset() jest często opowiedzią w sytuacji kiedy chcesz mieć kontrolę nad tym kiedy zaminna m być usunięta. sam o tym decydujesz, więc na pewno nie wychodz na jedno.

Cytat
Ale tylko jak masz na mysli zwolnic pamiec.


2)
Cytat
Nie prawda.
Tak jest w Javie, ale nie w php.

-- Edit : (Ten artykul jest o php4)
http://www.zend.com/zend/art/ref-count.php
kwiateusz
Ad. 2 w phpBB i innych forach po prostu w celu wykonania zapytania jest odpalana specjalna klasa która po wykonaniu zapytania zwieksza liczik wykonanych zapytan o 1 i potem na koniec skryptu ten licznik wyswietla...
tommy4
nom spoko, dzięki wszystkim, dzisiaj sobie poczytałem o zaawansowanych zapytaniach do sql, aliasy itd. to juz teraz elo pojdzie:) i - 100 zapytan na 100 newsow, mniejsze obciazenie bazy danych:O uff, ale mam roboty, ide robic, a nie sie obijac:D dzięki all
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.