Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql]Klasa obsługi bazy
Forum PHP.pl > Forum > Przedszkole
kuba749
Napisałem klasę do obsługi mysql-a przez php-a i miałbym taką prośbę czy mógłby mi ją ktoś przetestować oraz podpowiedzieć co jeszcze dopisać.
Dzięki
  1. <?php
  2.  
  3. class mysql
  4. {
  5. public $row;
  6.  
  7. public function __construct(){
  8.  
  9. $this->open = mysql_connect('localhost', 'root', 'root') or die("Nie udło się połczyć z serwerem " .mysql_error());
  10. $this->db = mysql_select_db('test', $this->open) or die("Nie udło się połczyć z bazą danych " .mysql_error());
  11.  
  12. }
  13.  
  14.  
  15. function query($sql){
  16.  
  17. mysql_query($sql) or die("Błąd: ".mysql_error());
  18.  
  19. }
  20.  
  21.  
  22. function newtable($name, $pola){
  23.  
  24. $this->query("CREATE TABLE $name ($pola)");
  25.  
  26. }
  27.  
  28. function insert($gdzie, $pola, $co){
  29.  
  30. $this->query("INSERT INTO $gdzie ( $pola ) VALUES ( $co )");
  31.  
  32. }
  33.  
  34. function delete($skad, $co){
  35.  
  36. $this->query("DELETE FROM $skad WHERE $co");
  37.  
  38. }
  39.  
  40. function update($co, $dane, $gdzie){
  41.  
  42. $this->query("UPDATE $co SET $dane WHERE $gdzie");
  43.  
  44. }
  45.  
  46. function select($co, $tabela, $gdzie){
  47.  
  48. $this->query("SELECT $co FROM $tabela WHERE $gdzie");
  49.  
  50. }
  51.  
  52. function fetch($co, $tabela, $gdzie){
  53. $this->row = mysql_fetch_row($this->select($co, $tabela, $gdzie));
  54. }
  55.  
  56. public function __destruct(){
  57.  
  58. mysql_close($this->open);
  59.  
  60. }
  61. }
  62.  
  63. ?>
nevt
niestety, ta klasa nie będzie ci działać, więc nawet nie ma co testować... najpoważniesze błędy to:

1. metoda query() nie zapamiętuje ani nie zwraca wyników zapytania, tym samym metoda select() nie zadziała...
2. metoda fetch() nie będzie działać... a w zasadzie (jeśli wcześniej poprawisz metody query() i select() zawsze będzie zwracać pierwszy wiersz wyniku zapytania...
3. konstruktor powinien otrzymywać jawnie przekazywane parametry połączenia, albo nazwę pliku konfiguracyjnego...
4. nie zadeklarowałeś właściwości $open i $db a używasz ich w konstruktorze...

to tyle na początek...
kuba749
  1. <?php
  2.  
  3. class mysql
  4. {
  5. public $row;
  6. public $open;
  7. public $db;
  8.  
  9. public function __construct(){
  10.  
  11. $this->open = mysql_connect('localhost', 'root', 'root') or die("Nie udło się połczyć z serwerem " .mysql_error());
  12. $this->db = mysql_select_db('test', $this->open) or die("Nie udło się połczyć z bazą danych " .mysql_error());
  13.  
  14. }
  15.  
  16. function query($sql){
  17. return mysql_query($sql) or die("Błąd: ".mysql_error());
  18.  
  19. }
  20.  
  21. function newtable($name, $pola){
  22. $this->query("CREATE TABLE $name ($pola)");
  23. }
  24.  
  25. function insert($gdzie, $pola, $co){
  26. $this->query("INSERT INTO $gdzie ( $pola ) VALUES ( $co )");
  27. }
  28.  
  29. function delete($skad, $co){
  30. $this->query("DELETE FROM $skad WHERE $co");
  31. }
  32.  
  33. function update($co, $dane, $gdzie){
  34. $this->query("UPDATE $co SET $dane WHERE $gdzie");
  35. }
  36.  
  37.  
  38. function select($co, $tabela, $gdzie){
  39. return $this->query("SELECT $co FROM $tabela WHERE $gdzie");
  40. }
  41.  
  42. function fetch($co, $tabela, $gdzie){
  43. while($this->row == mysql_fetch_row($this->select($co, $tabela, $gdzie))){
  44. $this->row[0];
  45. $this->row[1]; //to tylko przykład itd.
  46. }
  47. }
  48.  
  49. public function __destruct(){
  50. mysql_close($this->open);
  51. }
  52. }
  53.  
  54. ?>

Teraz już troche lepiej??
nospor
  1. <?php
  2. return mysql_query($sql) or die("Błąd: ".mysql_error());
  3. ?>

No kochany, jesli twoja klasa ma mi wywalac cala aplikacje bo w zapytaniu byl jakis blad to ja dziekuje...

Pozatym te select, update, delete itp. sa w zasadzie calkowicie bezuzyteczne, bo i tak trzeba im w zasadzie wszystko podac juz tak jak ma byc. Te funkcje same w sobie nic nie robia pod kątem sqlinjection itakie tam.

  1. <?php
  2. while($this->row == mysql_fetch_row($this->select($co, $tabela, $gdzie))){
  3. $this->row[0];
  4. $this->row[1]; //to tylko przykład itd.
  5. }
  6. ?>

oj, kiepsko poprawiles te fetch(). ty to wogole sam testowales? Jesli tak potestuj jeszcze raz a dopiero dawaj nam do teszczenia.
kuba749
  1. <?php
  2. class mysql{
  3.  
  4. public $open;
  5. public $db;
  6. public $wynik;
  7. var $rows;
  8. var $bufor = array();
  9.  
  10. function __construct(){
  11. $this->open = mysql_connect('localhost','root','')
  12. or die("Nie udało się połączyć z serwerem: ".mysql_error());
  13. $this->db = mysql_select_db('test',$this->open)
  14. or die("Nie udało sie połączyć z bazą danych: ".mysql_error());
  15. }
  16.  
  17. function __destruct(){
  18. mysql_close($this->open);
  19. }
  20.  
  21. function query($sql){
  22. $this->wynik = mysql_query($sql) or ($error = mysql_error());
  23. if($this->wynik) return ( $this->wynik );
  24. else{
  25. die ($error);
  26. }
  27. }
  28.  
  29. function fetch($sql, $typ){
  30. $typy = array(
  31. '1' => MYSQL_NUM,
  32. '2' => MYSQL_ASSOC,
  33. '3' => MYSQL_BOTH
  34. );
  35. while($rows = mysql_fetch_array($sql, $typy[$typ])){
  36. $this->bufor[] = $rows;
  37. }
  38. return ( $this->bufor );
  39. }
  40. }
  41. ?>

troche napoprawiałem i gdy np.
  1. <?php
  2. $sql = new mysql;
  3. $query = $sql->query("SELECT * FROM users");
  4. $row = $sql->fetch($query, 3);
  5. echo $row[0];
  6. ?>

nie wyświetla tego rekordu tylko Array co zrobić??
nospor
Cytat
troche napoprawiałem
tja, jasne. moją uwagę odnosnie die() to zmieniles jedynie kod, ktory defacto robi to samo co na poczatku - czyli wywala mi aplikacje gdy w zapytaniu jest blad.

Cytat
nie wyświetla tego rekordu tylko Array co zrobić??

nie:echo $row[0];
a: print_r($row[0])
Przeciez $row tablica wielowymiarowa.
kuba749
a co byś chciał żeby robiło jak się pojawi błąd??
nospor
zeby nie wywalalo mi aplikacji. To chyba oczywiste.

Musisz zwrocic wtedy false. A bledy masz zapisywac w jakiejs tablicy, od biety mozesz rzucic trigger_error()
kuba749
ale jak na przykład
  1. <?php
  2. $sql = new mysql;
  3. $query = $sql->query(SELECT * FROM userrs); //błąd w nazwie tabeli
  4. $row = $sql->fetch($query,2);
  5. print_r ($row[0]);
  6. ?>

jak będzie taki błąd to i tak nie zadiała
nospor
Jesli pojawi sie blad, czyli query zwroci false, to dalszy kod ktory przetwarza dane ma sie nie wykonac. Slyszales o instrukcjach warunkowych?
if fajnie to fajnie
else niefajnie i kodu nie wykonam
?
smile.gif
kuba749
w końcu chyba wiem już o ci dokładnie chodzi sciana.gif
a nie można by było tak:
  1. <?php
  2. function query($sql){
  3. $this->wynik = mysql_query($sql) or ($error = mysql_error());
  4. if($this->wynik) return ( $this->wynik );
  5. else{
  6. die ($error);
  7. exit(1);
  8. }
  9. ?>


może być tak:
  1. <?php
  2. function query($sql){
  3. $this->wynik = mysql_query($sql) or ($this->error .= mysql_error().'<br>');
  4. if($this->wynik) return ( $this->wynik );
  5. else return (false);
  6. }
  7. function fetch($sql, $typ){
  8. $typy = array(
  9. '1' => MYSQL_NUM,
  10. '2' => MYSQL_ASSOC,
  11. '3' => MYSQL_BOTH
  12. );
  13. if($this->query($sql) != false){
  14. while($rows = mysql_fetch_array($this->query($sql), $typy[$typ])){
  15. $this->bufor[] = $rows;
  16. }
  17. return ( $this->bufor );
  18. }
  19. }
  20. ?>

Przykład
  1. <?php
  2. $sql = "SELECT * FROM users";
  3. $mysql = new mysql;
  4. $row = $mysql->fetch($sql,2);
  5. print_r ($row[0][id]);
  6. print $mysql->error;
  7. ?>
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.