Ankündigung

Einklappen
Keine Ankündigung bisher.

persistente Verbindung + egene klasse

Einklappen

Neue Werbung 2019

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

  • persistente Verbindung + egene klasse

    ich habe eine klasse gebastellt für MSQL-Verbindungen:
    // include/db.inc.php
    PHP-Code:
    <?php
    class dbconnection{
      var 
    $connection;
      var 
    $result;
      var 
    $sql;
      function 
    db_connect($sql_query){
        
    $this->connection = @mysql_pconnect("localhost","user","using");
        if(
    $this->connection){
          @
    mysql_select_db("dbtest");
          
    $this->sql $sql_query;
          
    $this->result = @mysql_query($this->sql);
        }
        return 
    $this->result;
      }
    }
    ?>
    damit auch persistente Verbindung ensteht, habe ich mysql_pconnect() statt mysql_connect eingesetzt.

    In aller php-scripte mache ich gebrauch von dieser Klasse so:

    beispiel1/test1.php
    PHP-Code:
    <?php
    include('../include/db.inc.php');
    ...
    $sql_query "SELECT * FROM table1";
    $dbc = new dbconnection;
    $res1 $dbc->db_connect($sql_query);
    if(
    $res1){
      if(
    mysql_num_rows($res1) == 1){
        
    $error1 true;
      }
    }
    ...

    $sql_query "SELECT * FROM table2 WHERE ...";
    $dbc = new dbconnection;
    $res2 $dbc->db_connect($sql_query);
    if(
    $res2){
      
    $tref mysql_fetch_object($res2);
      ...
    }
    ...
    ?>
    Und jetzt bin ich nicht ganz sicher ob das alles richtig ist. Kann mir jemand
    die falsche vorgehensweisse oder Logikfehler zeigen?


  • #2
    die falsche vorgehensweisse oder Logikfehler zeigen?
    Du hast die Abermillionste Datenbankklasse verbrochen. Warum? Wozu?

    Kommentar


    • #3
      wie soll ich deine Antwort verstehen? warum verbrochen?
      bitte um sachliche Antwort, ich bin doch Anfänger.

      Kommentar


      • #4
        Was bringt Dir Deine eigene Klasse, was Dir bestehende, weitaus komplexere ggf durchdachtere Datenbankklassen nicht bieten?
        Wenn Du die Kapselung nur zur Übung schreibst, kann ich nur dazu raten: Erst ausgiebig Bestehendes nutzen. Dann irgendwann an die Grenzen stoßen. Und erst dann, wenn überhaupt, mit der Konzeption einer neuen Kapselung beginnen.

        warum verbrochen?
        Wieviel Zeit hast Du investiert? Wieviel Zeit hast Du investiert, bevor Du die erste Zeile Code geschrieben hast? Wieviel davon in Recherche zum Thema Datenbankabstraktion/-kapselung?
        "Verbrochen" im Sinne "na dann schreibe ich das eben mal".
        Man kann zur Übung alles selber machen. Aber bei vielen Themen bezweifel ich die Sinnhaftigkeit dessen - jedenfalls beim darauf-stürzen-wollen.

        Kommentar


        • #5
          ok., hab's verstanden; hast du auch recht. es ist aber eben so dass ich genau nur das brauche, was die klasse macht -> im bezug auf vielleicht
          , jetzt schon, 500 datenbank abfragen die die php-scripte im programm verursachen. anderseits habe ich, hmm... 1 minute gebraucht für diese klasse?-> ich habe mehrere jahre erfahrung in c++ und soweit haben schon die beide sprachen(php und c++) viel gemeinsames (wenn es um objecte geht) dass es auch unproblematisch ist irgendwas schnell und abstract umzusetzen. natürlich sind die abermillionen fertige klassen von komplexen gebrauch nützlicher- für dass was ich brauche sind die einfach zu "überqualifiziert". womit ich tatsächlich probleme habe ist eigentlich die frage, ob eine persistente verbindung damit realisierbar ist?

          Kommentar


          • #6
            Die persistente Verbindung ist von der Klasse unabhängig. Die wird von mysql_pconnect übernommen. pconnect hat einen Verbindungspool. Jedes mal, wenn eine Verbindung angefordert wird, schaut es in diesem pool nach, ob es eine frei aber aktive Verbindung für Host/Benutzer/Kennwort gibt. Wenn ja, wird diese Verbindung zurückgeliefert.
            Von daher funktioniert die Klasse im Prinzip.

            Kritik:
            db_connect stellt nicht primär die Verbindung her sondern führt eine Abfrage durch. Der Name ist verwirrend. db_query passt eher.
            Es geht offensichtlich um eine sehr einfache Kapselung; die Abfragen sollen sehr einfach durchgeführt werden können. Im Prinzip über den Aufruf nur einer einzelnen Methode. Das dafür aber oft im Skript. Ein ständiges Neuverbinden - selbst wenn es "nur" über pconnect läuft - ist überflüssig.
            Also Verbindung nur herstellen, wenn sie noch nicht besteht.
            PHP-Code:
            <?php
            class DBSource{
              var 
            $connection null;
              var 
            $result null;
              var 
            $sql null;
              
              function 
            db_query($sql_query){
                if (
            is_null($this->connection)) {
                    
            $this->connection = @mysql_pconnect("localhost","user","using");
                    if (!
            $this->connection) {
                        
            $this->connection null;
                        return 
            false;
                    }
                }
                
                    if (!@
            mysql_select_db("dbtest")) {
                        return 
            false;
                    }
                    
                    
            $this->sql $sql_query;
                
            $this->result = @mysql_query($this->sql);
                return 
            $this->result;
              }
            }
            ?>
            Wenn sich damit die Verwendung von pconnect erübrigt, dann durch connect ersetzen.
            Dafür ist übrigens keine Klasse erforderlich. Dank static funktioniert das auch mit einer einfachen Funktion, bis auf das Zwischenspeichern von $sql und $result.

            Kommentar


            • #7
              Bruchpilot -> 10000 dank.

              Kommentar

              Lädt...
              X