Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z MySQLi OOP, nie chce wykonać zapytania w metodzie by zwrócić wynik
ksenonlogin
post
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 (IMG:style_emoticons/default/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
 
Start new topic
Odpowiedzi
Greg0
post
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 (IMG:style_emoticons/default/smile.gif) printf nie załatwia spawy
Go to the top of the page
+Quote Post
ksenonlogin
post
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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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

Posty w temacie


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: 5.10.2025 - 08:20