MySQL Datenbank Klasse

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL Datenbank Klasse

    Hi Leude...

    ich arbeite schon lange mit php habe ich aber erst vor nem monat oder so an klassen rangetraut...

    hier meine erste funktionierende klasse

    PHP-Code:
    <?

    // Benötigt: MySQL Zugangsdaten als Array -> $MySQL['host'], user, pass, base

    class db_class
    {

      function db_class($sql)                        // Konstruktor
      {
        $this->MySQL = $GLOBALS['MySQL'];
        $this->sql   = $sql;
        $this->my_connect();
        $this->db_select();
      } // Ende Konstrukor

      function my_connect()                          // Verbindungsaufbau zum Datenbankserver
      {
        if (!$this->conn_id = mysql_connect($this->MySQL['host'],$this->MySQL['user'],$this->MySQL['pass']))
        { echo "Die Verbindung zum Datenbankserver konnte nicht hergestellt werden.<br>"; }
        return $this->conn_id;
      }
      
      function db_select()                           // Wählt die Datenbank aus
      {
        if (!$this->select = mysql_select_db($this->MySQL['base'],$this->conn_id))
        { echo "Datenbankanfrage Fehlgeschlagen.<br>"; }
        return $this->select;
      }

      function query()                               // Sendet einen sql befehl zur Datenbank
      {
        if (!$this->result = mysql_query("$this->sql"))
        { echo "Zugriff Daten Fehlgeschlagen.<br>"; }
        return $this->result;
        $this->my_close();
      }

      function my_close()                            // Beendet die Verbindung zur Datenbank
      {
        mysql_close($this->conn_id);
      }

    }
    ?>
    Die Klasse wird folgendermassen aufgerufen:
    PHP-Code:
    $db = new db_class("SELECT * FROM $table");
    $row mysql_fetch_array($db->query()) 
    und dann wie gewohnt die spalten auslesen...


    Ich wäre sehr dankbar über verbesserungsvorschläge bzw. hatte ich vor eine Error funktion mit einzubauen...
    habe aber keinen plan wie ich das anstellen soll

    Viel spass beim Code klaun
    (dafür poste ich es ja... )
    Zuletzt geändert von lordsepp; 12.09.2003, 00:40.

  • #2
    wo ist jetzt der vorteil in deiner class?

    - für jede query machst du einen neuen connect zur db auf.

    - du hast keine fehlerbehandlung. (ok, das wolltest du ja noch machen. )

    - der php-code ist dennoch nicht weniger und besser geworden.

    im endeffekt ist es nur als ein umständlicher alias für mysql_query() anzusehen.

    daher musst du da wohl noch einmal ran...
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      im prinzip haste recht

      aber wie bau ichs am besten auf damit deine punkte erfüllt werden...

      das mit dem neuen connect bei jedem aufruf könnte ich ja umgehen wenn ich den connect in den konstruktor reinhaue und den sql befehl an der query funktion ranbaue....

      so brauch ich die klasse nur einma aufrufen und kann dann mit
      $db->query($sql)
      nen neuen befehl senden...

      dann muss ich aber trotzdem am ende jeder seite die datenbank schliessen...

      langsam blick ich nichmehr durch
      wäre schon für denkantsösse sehr dankbar

      Kommentar


      • #4
        als erstes kommst du jetzt aus den CS zum BS rein.... *VERSCHIEB*

        so brauch ich die klasse nur einma aufrufen und kann dann mit
        $db->query($sql)
        nen neuen befehl senden...
        schlaues kerlchen... dann mache das doch schon einmal.

        wäre schon für denkantsösse sehr dankbar
        deswegen bist du nun hier im BS....

        aber hier schonmal die WICHTIGSTEN fkts einer db-class
        PHP-Code:
        <?php

            
        class database
            
        {
                function 
        database() {}
                function 
        connect() {}
                function 
        close() {}
                function 
        select_database() {}
                function 
        sql() {}
                function 
        fetch() {}
                function 
        get_field() {}
            }

        ?>

        dann muss ich aber trotzdem am ende jeder seite die datenbank schliessen...
        das macht php für dich.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Original geschrieben von Abraxax
          das macht php für dich.
          Womit wir die Methode close schonmal weglassen können.
          Eine Methode select_db find ich auch nur bedingt nützlich, weil man sowieso immer die gleiche DB verwendet, und das ganze somit besser in den Konstruktor packt (is aber Geschmackssache).
          hopka.net!

          Kommentar


          • #6
            Original geschrieben von Hopka
            [...] weil man sowieso immer die gleiche DB verwendet, und das ganze somit besser in den Konstruktor packt (is aber Geschmackssache).
            im prinzip hast du recht.

            wenn du aber bei deinem hoster mehrere DBs nutzen kannst, so kannst du bequem wechseln... ausserdem rufe ich den db-selector eh im contructor auf.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Original geschrieben von Abraxax
              das macht php für dich.
              Den Blödsinn hört man auch immer wieder ... natürlich macht PHP das ... allerdings gehört es zu einem sauberer Programmierstil so etwas selbst zu machen ... !

              Ihr quakt euch hier im Forum einen zurecht wie man seine Scripte optimieren kann ... schon mal darüber nachgedacht Das eine Manuell geschlossene Datenbankverbindung eventuell anderen Scripten eher wieder zur Verfügung steht ... ?? ... Scheinbar hast Du noch nie ein System entwickelt das richtig Last macht ... !

              Natürlich gehört eine close()-Methode ... ein eine richtige DB Klasse ... allerdings ist das Grundgerüst schon so zurechtgestümpert, das Du die getrost auch noch weglassen kannst ... !
              carpe noctem

              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

              Kommentar


              • #8
                jo... hack doch auf mir rum!!!
                Natürlich gehört eine close()-Methode ... ein eine richtige DB Klasse ... allerdings ist das Grundgerüst schon so zurechtgestümpert, das Du die getrost auch noch weglassen kannst ... !
                falls du lesen kannst lies das:
                hier meine erste funktionierende klasse
                ich habe das nicht umsonst hier gepostet...
                sondern um konstruktive tipps zu bekommen die mir weiterhelfen einen von dir sogenannten "sauberen Programmierstil" zu bekommen!!!

                ansonsten...

                Kommentar


                • #9
                  Original geschrieben von lordsepp
                  jo... hack doch auf mir rum!!!
                  Ehrlich gesagt ging es mir nicht um Dein Konzept ... das dieses Dein erster Versuch war hatte ich durchaus verstanden ... !
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Kommentar


                  • #10
                    Naja möchte nicht gleich als Forenneuling stress anfangen!

                    hatte mich aber schon etwas angegriffen gefühlt...

                    Kommentar


                    • #11
                      Entspann Dich wieder ...
                      carpe noctem

                      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                      Kommentar


                      • #12
                        OffTopic:
                        das war kein angriff!

                        das war eine normale goth-meinungsäuserung
                        Man lernt nie aus...

                        ...und wenn man's doch tut braucht man sich auch nicht schämen!

                        Kommentar


                        • #13
                          Original geschrieben von goth
                          Natürlich gehört eine close()-Methode ... ein eine richtige DB Klasse ... allerdings ist das Grundgerüst schon so zurechtgestümpert, das Du die getrost auch noch weglassen kannst ... !
                          @goth.
                          ich gehe mal davon aus, dass du mich meinst?

                          wenn du genau siehst, gibt es die close() auch bei mir!

                          ansonsten hast du recht. nur wenn es noch nicht sauber unter php4 funktioniert einen destruktor (oder wie es richtig heisst) zu haben, musst du es manuell machen. und da meine scripte i.d.r. nicht ewig laufen, lasse ich das close() von php machen.

                          somit wird seitens php die verbindung getrennt und gut ist.
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            @goth
                            wenn du Abraxax beispiel zurechtgestümpert findest...
                            wie würdest du es denn machen?

                            Kommentar


                            • #15
                              mein verbesserungsversuch...

                              Habe mich vor ein paar tagen mal wieder ernsthaft mich damit beschäftigt
                              und bin auf ein recht ansehnliches ergebnis gekommen (also denke ich jetzt mal )
                              war wirklich sehr viel arbeit *angeb*
                              bin aber immer noch für verbesserungsvorschläge und tipps offen

                              ist ein bisschen kommentarlos... die bin ich grade am einfügen ich hoffe ihr blickt trotzdem durch!

                              PHP-Code:
                              <?
                              // Benötigt: MySQL Zugangsdaten als Array -> $MySQL['host'], $MySQL['user'], $MySQL['pass'], $MySQL['base']

                              class db_class
                              {

                                var $MySQL;
                                var $status = 0;
                                var $conn_id;
                                var $select;
                                var $sql;
                                var $result;
                                var $result_rows;
                                var $while_str;
                                var $row;
                                var $errornum;
                                var $errormsg;

                                function db_class()
                                {
                                  $this->MySQL = $GLOBALS['MySQL'];
                                  $this->connect();
                                  $this->select_db();
                                }

                                function connect()
                                {
                                  if ($this->status != 1)
                                  {
                                    if (!$this->conn_id = mysql_connect($this->MySQL['host'],$this->MySQL['user'],$this->MySQL['pass']))
                                    {
                                      $this->errormsg = mysql_error();
                                      $this->errornum = mysql_errno();
                                      return 0;
                                    } else { $this->status = 1; return 1; }
                                  } else { return 0; }
                                }
                                
                                function select_db()
                                {
                                  if ($this->status == 1)
                                  {
                                    if (!$this->select = mysql_select_db($this->MySQL['base'],$this->conn_id))
                                    {
                                      $this->errormsg = mysql_error();
                                      $this->errornum = mysql_errno();
                                      return 0;
                                    } else { return 1; }
                                  } else { return 0; }
                                }

                                function query($sql)
                                {
                                  if ($this->status == 1)
                                  {
                                      if (!$this->result = mysql_query($sql))
                                    {
                                      $this->errormsg = mysql_error();
                                      $this->errornum = mysql_errno();
                                      return 0;
                                    }
                                    else
                                    {
                                      if(substr($sql, 0, 6) == "SELECT")
                                      {
                                        $this->result_rows = mysql_num_rows($this->result);
                                        return 1;
                                      }
                                    }
                                  } else { return 0; }
                                }

                                function fetch_array()
                                {
                                  if(!$this->result)
                                  {
                                    $this->errormsg = 'Result is empty.';
                                    $this->errornum = '----';
                                    return 0;
                                  }
                                  else
                                  {
                                    return mysql_fetch_array($this->result);
                                  }
                                  }

                                function print_for($while_str)
                                {
                                  while($row = $this->fetch_array())
                                  {
                                    eval('echo "'.addslashes($while_str).'";');
                                  }
                                }

                                function error()
                                {
                                  return ($this->errornum . " : " . $this->errormsg);
                                  }
                                  
                              }
                              ?>
                              Aufruf durch zB:

                              PHP-Code:
                              $db = new db_class();
                              $db->query("SELECT * FROM menue ORDER BY rang");

                              $db->print_for('<a href="$row[link]">$row[title]</a><br>'); 
                              Zuletzt geändert von lordsepp; 23.09.2003, 12:11.

                              Kommentar

                              Lädt...
                              X