Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL][Class]Pobieranie wyników z bazy (fetch_array)
Forum PHP.pl > Forum > PHP
szmerak
  1. class DB {
  2. private $db;
  3. function __construct($rHost, $rUser, $rPassword, $rDB)
  4. {
  5. $this->db = @mysql_connect($rHost, $rUser, $rPassword);
  6. mysql_select_db($rDB, $this->db);
  7. }
  8. public function SQL($sql)
  9. {
  10. if($result = mysql_query($sql))
  11. {
  12. return $result;
  13. }else{
  14. return mysql_error();
  15. }
  16. }
  17. public function GetRows($sql)
  18. {
  19. while($row = mysql_fetch_array($this->SQL($sql)))
  20. {
  21. $arr[] = $row;
  22. }
  23. return $arr;
  24. }
  25. }

Mam tutaj prostą klasę do łącznia się z bazą.
Dopiero od wczoraj zaczełem się bawić z klasami. Próbuje cały czas ale coś mi nie wychodzi.
Mam problem z funkcją GetRows nie wiem czemu ale strona się tak długo ładuje aż do overloadu, przez tą pętlę while.
Jak by ktoś mi mógł pomóc i wskazać gdzie jest błąd był bym bardzo wdzięczny.
cycofiasz
Może wyciągnij $this->SQL($sql) przed pętlę?
buliq
Włącz raportowanie błędów, przypisujesz do zmiennej $this->db wskaźnik połączenia jednak z niego nie korzystasz? Sprawdź czy połączenie jest ustanowione.

Na moje oko to: mysql_fetch_array($this->SQL($sql)) nie zwraca tego co powinno - sprawdź typeof
szmerak
cycofiasz dzięki wielkie smile.gif działa

builq nie korzystam z $db ponieważ przy wywoływaniu klasy łącze się z bazą...
buliq
Ale wiesz o tym że mysql_query przyjmuje 2 parametry? 2 co prawda opcjonalny ale skoro już zapisujesz warto go wykorzystywać. Poza tym czy jesteś połączony do mysql sprawdzałbym przy każdym wywołaniu metody SQL. Nie widzę abyś gdziekolwiek to sprawdzał.

Ale to tylko takie tam ...
szmerak
Masz rację tongue.gif Lepiej zablokować wszystkie zapytania...
  1. <?
  2. class DB {
  3. private $db;
  4. private $db_error;
  5. function __construct($rHost, $rUser, $rPassword, $rDB)
  6. {
  7. if(!$this->db = @mysql_connect($rHost, $rUser, $rPassword))
  8. {
  9. $this->db_error = TRUE;
  10. }
  11. if(!mysql_select_db($rDB, $this->db))
  12. {
  13. $this->db_error = TRUE;
  14. }
  15. }
  16. public function SQL($sql)
  17. {
  18. if(!isset($this->db_error))
  19. {
  20. if($result = mysql_query($sql))
  21. {
  22. return $result;
  23. }else{
  24. return mysql_error();
  25. }
  26. }
  27. }
  28. public function SqlAssocRows($sql)
  29. {
  30. if(!isset($this->db_error))
  31. {
  32. $query = $this->SQL($sql);
  33. while($row = mysql_fetch_assoc($query))
  34. {
  35. $rows[] = $row;
  36. }
  37. return $rows;
  38. }
  39. }
  40. public function SqlAssocRow($sql)
  41. {
  42. if(!isset($this->db_error))
  43. {
  44. $query = $this->SQL($sql);
  45. return mysql_fetch_assoc($query);
  46. }
  47. }
  48. }
  49.  
  50.  
  51.  
  52.  
  53. ?>


Poprawiony kod Tylko jeszcze dorobie obsługę langów i będzie wywalało błąd tongue.gif
buliq
A mi pozostało jeszcze wskazać tylko jedno smile.gif :

  1. if($result = mysql_query($sql[b],$this->db[/b]))


Mówiłem iż $this->db zawiera wskaźnik dla połączenia, de facto nie powinien zgubić go ale gdybyś chciał połączenia do 2 baz to zawsze lepiej to wstawić.
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.