Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] unset i ilosc zapytan do bazy danych
tommy4
post
Post #1





Grupa: Zarejestrowani
Postów: 288
Pomógł: 12
Dołączył: 2.12.2005

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


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. (IMG:http://forum.php.pl/style_emoticons/default/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:)

Ten post edytował tommy4 10.07.2006, 07:44:03
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #2





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




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nasty
post
Post #3





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


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.

Ten post edytował nasty_psycho 10.07.2006, 10:17:32
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


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

Ten post edytował nasty_psycho 10.07.2006, 10:30:02
Go to the top of the page
+Quote Post
kwiateusz
post
Post #6


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




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...
Go to the top of the page
+Quote Post
tommy4
post
Post #7





Grupa: Zarejestrowani
Postów: 288
Pomógł: 12
Dołączył: 2.12.2005

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


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
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: 24.08.2025 - 17:45