Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql]Klasa obsługi bazy
kuba749
post
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 30.07.2006
Skąd: Jasło

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


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


Ten post edytował kuba749 14.01.2008, 21:36:22
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


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


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
kuba749
post
Post #3





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 30.07.2006
Skąd: Jasło

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


  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??

Ten post edytował kuba749 14.01.2008, 22:12:35
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kuba749
post
Post #5





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 30.07.2006
Skąd: Jasło

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


  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ć??

Ten post edytował kuba749 15.01.2008, 14:25:17
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kuba749
post
Post #7





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 30.07.2006
Skąd: Jasło

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


a co byś chciał żeby robiło jak się pojawi błąd??
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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()


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kuba749
post
Post #9





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 30.07.2006
Skąd: Jasło

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


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

Ten post edytował kuba749 15.01.2008, 14:48:25
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kuba749
post
Post #11





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 30.07.2006
Skąd: Jasło

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


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


Ten post edytował kuba749 16.01.2008, 10:42:20
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 Aktualny czas: 21.08.2025 - 14:16