Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Sterownik bazy danych
Forum PHP.pl > Forum > PHP > Object-oriented programming
Helid
Napisałem własny sterownik bazy danych (Moja 2 klasa proszę być wyrozumiałym).
  1. <?php
  2. /**************************************
  3. Klasa do obsługi mysql, stworzona
  4. przez Helid'a
  5. email: matinowakma@gmail.com
  6. Wszystkie prawa zastrzeżone.
  7. Licencja dla gry Night Racers.
  8. ***************************************/
  9. class db 
  10. {
  11. /**
  12. Połączenie mysql
  13. **/
  14. private $polaczenie = '';
  15. /**
  16. Baza danych
  17. **/ 
  18. private $baza = ''; 
  19. /**
  20. Indyfikator zapytania
  21. **/
  22. private $zapytanie = '';
  23. /**
  24. Ilość zapytań
  25. **/
  26. public $queries = '0';
  27. /**
  28. Ilość wystąpinoych błędów w zapytaniach
  29. **/
  30. private $bledy = '0';
  31. /**
  32. Konstruktor klasy 
  33. Odpowiadajacy za połączenie
  34. **/
  35. public function __construct($dbhost, $dbuser, $dbpass, $db)
  36. {
  37.  $this->polaczenie = @mysql_connect($dbhost, $dbuser, $dbpass);
  38. if($this->polaczenie)
  39. {
  40.  $this->baza = @mysql_select_db($db , $this->polaczenie);
  41. if(!$this->baza)
  42. {
  43. echo 'Wystąpił bug z wyborem bazy danych';
  44. mysql_close($this->polaczenie);
  45.  exit();
  46. }
  47.  } else {
  48.  echo 'Wsytąpił bug z połaczeniem mysql';
  49.  }
  50.  
  51. }//koniec __construct 
  52.  
  53. /**
  54. Funkcja odpowiada za zapytanie.
  55. **/
  56. public function query ($dbzapytanie) {
  57. $this->zapytanie = '';
  58. $this->zapytanie = @mysql_db_query($this->baza, $dbzapytanie, $this->polaczenie);
  59. if (!$this->zapytanie) {
  60. $this->bledy++;
  61. echo 'Wystąpił bug z zapytaniem. ';
  62. } else {
  63. $this->queries++;
  64. return $this->zapytanie;
  65. }
  66. } //end query
  67.  
  68. /**
  69.  * mostid - zwraca numer ID wygenerowny podczas ostatniej operacji dodowania rekordu
  70. */
  71. private function mostid()
  72. {
  73. return mysql_insert_id($this->polaczenie);
  74. } //end mostid
  75. /**
  76. Automatyczne zamykanie połączenia z mysql
  77. **/
  78. public function __destruct()
  79. {
  80. $zamykanie = @mysql_close($this->polaczenie);
  81. if(!$zamykanie)
  82. {
  83.  echo 'Podczas zamykania połączenia wystąpił błąd';
  84. } //end __destruct
  85. }
  86.  
  87.  private function error($zapytanie = '' )
  88. {
  89. if($zapytanie == '' )
  90. {
  91. echo '<br />Baza danych zwróciła komunikat o błędzie numer <b>' . mysql_errno() . '</b> i zawierającą błąd zapytania - <b><font color="red">' . mysql_error() . '</font></b><br />';
  92. }
  93. else
  94. {
  95. echo '<br />Baza danych zwróciła komunikat o błędzie numer <b>' . mysql_errno() . '</b> i zawierającą błąd zapytania - <b>' . mysql_error() . '</b>.<br />Błąd wystąpił w zapytaniu : <b><font color="red">' . $zapytanie . '</b></font><br />';
  96. }
  97. } //end error();
  98. /**
  99. Pobranie danego rekordu
  100. **/
  101. public function fetcharray($zap)
  102. {
  103. $fetch = @mysql_fetch_array($zap, MYSQL_ASSOC);
  104. if(!$fetch)
  105. {
  106. $this->bledy++;
  107. echo 'Wystąpił błąd';
  108. }
  109. else
  110. {
  111. return $fetch;
  112. }
  113. } //end fetchrow
  114.  
  115. /**
  116. Zlicza ilość rekordów
  117. */
  118. public function NumRows()
  119. {
  120. $zlicz = @mysql_num_rows($this->zapytanie);
  121. if(!$zlicz)
  122. {
  123.  echo 'Wystąpił bug ze zliczaniem wierszy.';
  124. }
  125. else
  126. {
  127. return $zlicz;
  128. }
  129. } //end NumRows
  130.  
  131.  
  132. }
  133. ?>

Przykład użycia:
  1. <?php
  2. /**********************************
  3. Test stweronika db napisanego
  4. przez Helid'a
  5. ***********************************/
  6. include 'sql_drivers/mysql.php';
  7. $db = new db( 'sql.boo.pl' , '%%%', '%%%', '%%%' );// % = moje dane
  8. $objResult = $db->query( 'SELECT * FROM users where login=`helid`' );
  9. while($arrTab = $db->fetcharray($objResult))
  10. {
  11. echo $arrTab['login'];
  12. }
  13. ?>

I wygląda to tak, że wywala bug:
Wystšpił bug z zapytaniem.
Fatal error: Call to a member function fetcharray() on a non-object in /home/accounts_h/helid/public_html/game/ex.php on line 9
Demo na:
http://nightracers.pl/ex.php

Szukałem rozwiązań, ale nie znazłem, co jest źle?

UWAGA ODŚWIEŻYLEM SKRYPT, POPRAWIŁEM 1 BUG.
Xniver
Mi twój przykład takiego błędu nie wywala(Wystšpił bug z zapytaniem. Wystšpił błšd z feth arry)

A poza tym:
1. Czemu pola 'queries' i 'bledy' są typu string?
2. Czemu raz nazywasz metody/pola/zmienne po angielsku ,a raz po polsku?
3. Czy naprawdę nie możesz użyć Creole/PDO?
4. Czemu mysql_db_query ,a nie mysql_query?
Helid
1. Czemu pola 'queries' i 'bledy' są typu string?
1. A czemu nie?? czarodziej.gif
2. Czemu raz nazywasz metody/pola/zmienne po angielsku ,a raz po polsku?
2. Bo tak lubię :-) guitar.gif
3. Czy naprawdę nie możesz użyć Creole/PDO?
3. Z PDO nigdy nie korzystałem - trudne dla mnie. sciana.gif
4. Czemu mysql_db_query ,a nie mysql_query?
4.Bo klasa mysql jaka pierwszą widziałem. (Chyba usera mike) worriedsmiley.gif
Tak miała zrobione.
Wiem, że robi się mysql_query(Zapytanie, baza danych),
ale sam wiesz, że zostałem `zmuszony` jak w 2 klasach takie coś zauważyłem. wstydnis.gif
Xniver
Cytat(Helid @ 6.03.2008, 19:10:59 ) *
1. Czemu pola 'queries' i 'bledy' są typu string?
1. A czemu nie?? czarodziej.gif
2. Czemu raz nazywasz metody/pola/zmienne po angielsku ,a raz po polsku?
2. Bo tak lubię :-) guitar.gif
3. Czy naprawdę nie możesz użyć Creole/PDO?
3. Z PDO nigdy nie korzystałem - trudne dla mnie. sciana.gif
4. Czemu mysql_db_query ,a nie mysql_query?
4.Bo klasa mysql jaka pierwszą widziałem. (Chyba usera mike) worriedsmiley.gif
Tak miała zrobione.
Wiem, że robi się mysql_query(Zapytanie, baza danych),
ale sam wiesz, że zostałem `zmuszony` jak w 2 klasach takie coś zauważyłem. wstydnis.gif

1. Skoro korzystasz z tych pól jako liczby to powinieneś użyć typu int
2. Przez takie coś kod nie wygląda zbyt ładnie
3. ohmy.gif A może Propel?
4. W konstruktorze używasz funkcji mysql_select_db ,więc korzystanie z mysql_db_query nie ma sensu(btw ja jakoś nigdy nie spotkałem się z używaniem mysql_db_query...)
Helid
  1. <?php
  2. /**************************************
  3. Klasa do obsługi mysql, stworzona
  4. przez Helid'a
  5. email: matinowakma@gmail.com
  6. Wszystkie prawa zastrzeżone.
  7. Licencja dla gry Night Racers.
  8. ***************************************/
  9. class db 
  10. {
  11. /**
  12. Połączenie mysql
  13. **/
  14. private $polaczenie = '';
  15. /**
  16. Baza danych
  17. **/ 
  18. private $baza = ''; 
  19. /**
  20. Indyfikator zapytania
  21. **/
  22. private $zapytanie = '';
  23. /**
  24. Ilość zapytań
  25. **/
  26. public $queries = '0';
  27. /**
  28. Ilość wystąpinoych błędów w zapytaniach
  29. **/
  30. private $bledy = '0';
  31. /**
  32. Konstruktor klasy 
  33. Odpowiadajacy za połączenie
  34. **/
  35. public function __construct($dbhost, $dbuser, $dbpass, $db)
  36. {
  37.  $this->polaczenie = @mysql_connect($dbhost, $dbuser, $dbpass);
  38. if($this->polaczenie)
  39. {
  40.  $this->baza = @mysql_select_db($db , $this->polaczenie);
  41. if(!$this->baza)
  42. {
  43. echo 'Wystąpił bug z wyborem bazy danych';
  44. mysql_close($this->polaczenie);
  45.  exit();
  46. }
  47.  } else {
  48.  echo 'Wsytąpił bug z połaczeniem mysql';
  49.  }
  50. }//koniec __construct 
  51.  
  52. /**
  53. Funkcja odpowiada za zapytanie.
  54. **/
  55. public function query ($dbzapytanie) {
  56. $this->zapytanie = '';
  57. $this->zapytanie = @mysql_query($dbzapytanie);
  58. if (!$this->zapytanie) {
  59. $this->bledy++;
  60. echo 'Wystąpił bug z zapytaniem. ';
  61. } else {
  62. $this->queries++;
  63. return $this->zapytanie;
  64. }
  65. } //end query
  66.  
  67. /**
  68.  * mostid - zwraca numer ID wygenerowny podczas ostatniej operacji dodowania rekordu
  69. */
  70. private function mostid()
  71. {
  72. return mysql_insert_id($this->polaczenie);
  73. } //end mostid
  74. /**
  75. Automatyczne zamykanie połączenia z mysql
  76. **/
  77. public function __destruct()
  78. {
  79. $zamykanie = @mysql_close($this->polaczenie);
  80. if(!$zamykanie)
  81. {
  82.  echo 'Podczas zamykania połączenia wystąpił błąd';
  83. } //end __destruct
  84. }
  85.  private function error($zapytanie = '' )
  86. {
  87. if($zapytanie == '' )
  88. {
  89. echo '<br />Baza danych zwróciła komunikat o błędzie numer <b>' . mysql_errno() . '</b> i zawierającą błąd zapytania - <b><font color="red">' . mysql_error() . '</font></b><br />';
  90. }
  91. else
  92. {
  93. echo '<br />Baza danych zwróciła komunikat o błędzie numer <b>' . mysql_errno() . '</b> i zawierającą błąd zapytania - <b>' . mysql_error() . '</b>.<br />Błąd wystąpił w zapytaniu : <b><font color="red">' . $zapytanie . '</b></font><br />';
  94. }
  95. } //end error();
  96. /**
  97. Pobranie danego rekordu
  98. **/
  99. public function fetcharray($zap)
  100. {
  101. $fetch = @mysql_fetch_array($zap, MYSQL_ASSOC);
  102. if(!$fetch)
  103. {
  104. $this->bledy++;
  105. echo 'Wystąpił błąd z feth arry';
  106. }
  107. else
  108. {
  109. return $fetch;
  110. }
  111. } //end fetchrow
  112. /**
  113. Zlicza ilość rekordów
  114. */
  115. public function NumRows()
  116. {
  117. $zlicz = @mysql_num_rows($this->zapytanie);
  118. if(!$zlicz)
  119. {
  120.  echo 'Wystąpił bug ze zliczaniem wierszy.';
  121. }
  122. else
  123. {
  124. return $zlicz;
  125. }
  126. } //end NumRows
  127. }
  128. ?>

Najnowsza wersja, nic nie pomogło.
Xniver
A jaki błąd wywala?
Helid
http://nightracers.pl/ex.php
Wystšpił bug z zapytaniem. Wystšpił błšd z feth arry
Xniver
Zamień funkcje fetcharray na takie coś(mi zadziałała):

  1. <?php
  2. public function fetcharray($query)
  3. {
  4. return mysql_fetch_assoc($query);
  5. }
  6. ?>
Helid
Użyłem w sposób:
  1. <?php
  2. /**********************************
  3. Test stweronika db napisanego
  4. przez Helid'a
  5. ***********************************/
  6. include 'sql_drivers/mysql.php';
  7. $db = new db( 'sql.boo.pl' , '$$$$', '$$$$$', '$$$$' ); //$ = moje dane
  8. $db->query('SELECT * FROM users where login=helid');
  9. while($arrTab = $db->fetcharray($db->query))
  10. {
  11. echo $arrTab['login'];
  12. }
  13. ?>

Wystšpił bug z zapytaniem.
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/accounts_h/helid/public_html/game/sql_drivers/mysql.php on line 118
http://nightracers.pl/ex.php
Xniver
  1. <?php
  2. $db->query('SELECT * FROM users WHERE login="helid"');
  3. ?>
Helid
Jeden bug zniknął, ale został 2.
http://nightracers.pl/ex.php
Gdy użyje swojej funkcji feth to wyświetla:
Wystšpił błšd z feth arry
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.