Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z MySQLi OOP
Forum PHP.pl > Forum > PHP
ksenonlogin
Witam

Niżej przedstawiam klasę której głównym celem ma być realizacja zapytań do bazy przez mysqli i zwracanie wyniku końcowego przez wywołaną metodę.

Wszystko było by dobrze gdybym doszedł do etapu wykonywania zapytań, jednak zatrzymuję się na metodzie Query(), to właśnie tutaj ma być realizowane zapytanie gdzie metoda ma zwracać np.tablicę rekordów czy co tam mi przyjdzie do głowy.
Problem polega na tym że skrypt nie chce mi wykonać zapytanie tylko zatrzymuje się na nim i tyle.

Może robię coś źle, a raczej na pewno skoro nie działa wink.gif

class
  1. #-------------------+-----------------------------------------------------------------------+
  2. # TYPE | CLASS |
  3. #-------------------+-----------------------------------------------------------------------+
  4. # CLASS | class C_DBMysqliOOP extends C_DBConnectionParameters |
  5. #-------------------+-----------------------------------------------------------------------+
  6. # ATRYBUTES | private $host = 'default'; |
  7. # | private $user = 'default'; |
  8. # | private $password = 'default'; |
  9. # | private $database = 'default'; |
  10. #-------------------+-----------------------------------------------------------------------+
  11. # METHODS | public function __construct() |
  12. # | public function M_Query($query) |
  13. # | public function __destruct() |
  14. #-------------------+-----------------------------------------------------------------------+
  15.  
  16.  
  17. class C_DBMysqliOOP extends C_DBConnectionParameters {
  18.  
  19. private $host = 'default';
  20. private $user = 'default';
  21. private $password = 'default';
  22. private $database = 'default';
  23.  
  24. public function __construct() {
  25.  
  26. parent::M_DBDecoderParameters();
  27. $this -> host = parent::M_Host();
  28. $this -> user = parent::M_User();
  29. $this -> password = parent::M_Password();
  30. $this -> database = parent::M_Database();
  31.  
  32. $mysqli = @new mysqli($this -> host, $this -> user, $this -> password, $this -> database);
  33.  
  34. if ($mysqli -> connect_errno || $mysqli -> connect_error) {
  35. throw new Exception('Error Connect DB - ' . $mysqli -> connect_error.' NR: '.$mysqli -> connect_errno);
  36.  
  37. }
  38. }
  39.  
  40.  
  41. public function M_Query($query) {//problematyczna metoda w której nie wiem jak zrealizować zapytanie oraz zwrócić winik...
  42.  
  43. echo $query;
  44. //wyświetla zapytanie porawnie jednak go nierealizuje
  45.  
  46. $result = $mysqli -> query($query);
  47. $row = $result -> fetch_array(MYSQLI_ASSOC);
  48. printf("%s (%s)\n", $row["user_id"], $row["user_login"]);
  49.  
  50. }
  51.  
  52. public function __destruct() {
  53. echo '</br></br>--------------------------------------------</br></br>';
  54. }
  55.  
  56. }


Wywołanie
  1. $ms = new C_DBMysqliOOP();
  2. $ms->M_Query("SELECT * FROM user WHERE user_id=2");
Greg0
Metoda M_Query() nic nie zwraca, nie ma żadnego returna smile.gif printf nie załatwia spawy
ksenonlogin
Cytat(Greg0 @ 3.09.2012, 01:01:45 ) *
Metoda M_Query() nic nie zwraca, nie ma żadnego returna smile.gif printf nie załatwia spawy



W tym przypadku to niema znaczenia, w sytuacji gdyby return coś zwracał to bym musiał to wydrukować poza klasą (wychodzi na to samo), ale mniejsza o to; wszystko już działa.
Problem był w tym że połączenie z bazą danych przypisywałem do zmiennej $mysqli (linijka 32 starego skryptu) co powodowało konflikt przy podpinaniu tej zmiennej do zapytania (linijka 46 starego skryptu).

Obecnie wprowadziłem kilka zmian i działa - niżej poprawny skrypt dla tych którzy mają podobny problem wink.gif
Co prawda wymaga jeszcze kilka korekt, ale to kosmetyczne poprawki.


class
  1. #-------------------+-----------------------------------------------------------------------+
  2. # TYPE | CLASS |
  3. #-------------------+-----------------------------------------------------------------------+
  4. # CLASS | class C_DBMysqliOOP extends C_DBConnectionParameters |
  5. #-------------------+-----------------------------------------------------------------------+
  6. # ATRYBUTES | private $host = 'default'; |
  7. # | private $user = 'default'; |
  8. # | private $password = 'default'; |
  9. # | private $database = 'default'; |
  10. #-------------------+-----------------------------------------------------------------------+
  11. # METHODS | public function __construct() |
  12. # | public function M_Query($query) |
  13. # | public function __destruct() |
  14. #-------------------+-----------------------------------------------------------------------+
  15.  
  16.  
  17. class C_DBMysqliOOP extends C_DBConnectionParameters {
  18.  
  19. private $host = 'default';
  20. private $user = 'default';
  21. private $password = 'default';
  22. private $database = 'default';
  23.  
  24. private $db_connect = 'default';
  25.  
  26.  
  27.  
  28. public function __construct() {
  29.  
  30. parent::M_DBDecoderParameters();
  31. $this -> host = parent::M_Host();
  32. $this -> user = parent::M_User();
  33. $this -> password = parent::M_Password();
  34. $this -> database = parent::M_Database();
  35.  
  36. $this -> db_connect = @new mysqli($this -> host, $this -> user, $this -> password, $this -> database);
  37.  
  38. if ($this -> db_connect -> connect_errno || $this -> db_connect -> connect_error) {
  39. throw new Exception('Error Connect DB - ' . $this -> db_connect -> connect_error . ' NR: ' . $this -> db_connect -> connect_errno);
  40. }
  41. }
  42.  
  43. public function M_Query($query) {
  44.  
  45. if ($result = $this -> db_connect -> query($query)) {
  46. while ($row = $result -> fetch_assoc()) {
  47. $return[] = $row;
  48. }
  49. }
  50. return $return;
  51. }
  52.  
  53. public function __destruct() {
  54. '</br></br>--------------------------------------------</br></br>';
  55. }
  56.  
  57. }



Wywołanie
  1. $ms = new C_DBMysqliOOP();
  2. $return = $ms -> M_Query("SELECT * FROM user");
  3.  
  4. foreach ($return as $row) {
  5. echo $row['user_id'] . ' ' . $row['user_login'] . '</br>';
  6. }
Greg0
Tak czy siak IMO klasa nie jest napisana poprawnie. Klasa nie powinna się zajmować prezentacją danych
ksenonlogin
Cytat(Greg0 @ 3.09.2012, 12:06:33 ) *
Tak czy siak IMO klasa nie jest napisana poprawnie. Klasa nie powinna się zajmować prezentacją danych


A dokładniej?
chodzi o drukowanie danych czy ich zwracanie?
w których linijkach robię błędy?

Będę wdzięczny za wskazówki
cudny
Greg0wi chyba chodziło o to że jest to część biznesowa aplikacji (coś w rodzaju modelu) i nie powinieneś tam używać echo czy print ale z tego co widzę robisz to tylko dla sprawdzenia czy wszystko jest w porządku, więc problemu nie widzę
ksenonlogin
Cytat(cudny @ 3.09.2012, 22:25:51 ) *
Greg0wi chyba chodziło o to że jest to część biznesowa aplikacji (coś w rodzaju modelu) i nie powinieneś tam używać echo czy print ale z tego co widzę robisz to tylko dla sprawdzenia czy wszystko jest w porządku, więc problemu nie widzę



Dokładnie tak.
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.