Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z MySQLi OOP, nie chce wykonać zapytania w metodzie by zwrócić wynik
ksenonlogin
post 2.09.2012, 22:50:48
Post #1





Grupa: Zarejestrowani
Postów: 123
Pomógł: 3
Dołączył: 29.10.2011

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


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");


Ten post edytował ksenonlogin 2.09.2012, 22:51:27
Go to the top of the page
+Quote Post
Greg0
post 3.09.2012, 00:01:45
Post #2





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


Metoda M_Query() nic nie zwraca, nie ma żadnego returna smile.gif printf nie załatwia spawy
Go to the top of the page
+Quote Post
ksenonlogin
post 3.09.2012, 00:44:12
Post #3





Grupa: Zarejestrowani
Postów: 123
Pomógł: 3
Dołączył: 29.10.2011

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


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. }


Ten post edytował ksenonlogin 3.09.2012, 01:49:15
Go to the top of the page
+Quote Post
Greg0
post 3.09.2012, 11:06:33
Post #4





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


Tak czy siak IMO klasa nie jest napisana poprawnie. Klasa nie powinna się zajmować prezentacją danych
Go to the top of the page
+Quote Post
ksenonlogin
post 3.09.2012, 18:05:44
Post #5





Grupa: Zarejestrowani
Postów: 123
Pomógł: 3
Dołączył: 29.10.2011

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


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
Go to the top of the page
+Quote Post
cudny
post 3.09.2012, 21:25:51
Post #6





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


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ę


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
ksenonlogin
post 4.09.2012, 09:02:38
Post #7





Grupa: Zarejestrowani
Postów: 123
Pomógł: 3
Dołączył: 29.10.2011

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


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

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:13