verbindung automatisch herstellen

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

  • verbindung automatisch herstellen

    Mir geht es jetzt nicht um die Darstellung der Klassen bzw um dem Funktionsumfang.
    Sondern NUR um das Prinzip, das man die Verbindung zur Datenbank
    nicht immer selber herstellen muß.
    Wenn man einen query senden möchte,
    und keine Verbindung besteht,
    dann würd erst eine Verbindung hergestellt, bevor er gesendet würd.


    Beispiel:
    PHP-Code:
    $objekt_query = new query("select * from tabelle where id = '1';");
    $array $objekt_query->fetch();

    echo 
    $array['beispiel']; 
    Und die klassen:
    PHP-Code:
    // Servername
    define('MYSQL_SERVER''localhost');
    // Benutzer
    define('MYSQL_USER''ich');
    // Passwort
    define('MYSQL_PASS''nur_ich');

    class 
    _verbindung
    {
        var 
    $fehlermeldung true;    // Sollen Fehlermeldungen angezeigt werden?  ( true | false )
        
    var $_resource     false;   // Verbindungskennung bei Verbindung oder false;    
          
        
    function verbindung()
        {
            if ( ! 
    $this->resource = @mysql_connect(MYSQL_SERVERMYSQL_USERMYSQL_PASS) )
                die( 
    $this->fehlermeldung "<b>ERROR:</b> ".mysql_error() : "DB Verbindung konnte nicht hergestellt werden." );
        }
        
        function 
    db_close()
        {
            if (
    $this->resource
                @
    mysql_close($this->resource);
        }
    }
       
    class 
    query extends _verbindung
    {
        
    /**
        * true  = Fehlermeldungen anzeigen
        * false = Eigene Fehlermeldung ausgeben
        * @access global
        * @var bool
        */
        
    var $fehlermeldung true;   
        
        
    /**
        * @access global
        * @var string 
        */
        
    var $database "Datenbankname";
        
        
    /**
        * @access privat
        * @var string
        */
        
    var $_sql          "";
        
        
    /**
        * @access privat
        * @var resource | bool        ( SELECT, EXPLAIN, SHOW, DESCRIBE | true,false )     
        */
        
    var $_result       "";
        
        
    /**
        * @access privat
        * @var string Fehlertext
        */
        
    var $_error        "";
        
        
    /**
        * @access privat
        * @var int Fehlernummer
        */
        
    var $_errno        0;
        
        
    /**
        * @param string Query
        * @param string Datenbank (optional)
        */
        
    function query($sql$database ""
        {            
            
    // query in class speichern
            
    $this->_sql $sql;
            
            
    // Wenn keine Verbindungskennung, dann Verbindung aufbauen
            
    if ( ! $this->_resource )
                
    $this->verbindung();                
            
            
    // Datenbank auswaehlen
            
    $this->_select_db$database != "" $database $this->database );
                    
            
    // Query senden 
            
    if ( ! $this->_result mysql_query($this->_sql))
            {
                
    // Wenn Query nicht erfolgreich war, denn entsprechenden Fehlertext speichern.
                
    $this->_error mysql_error();
                
    $this->_errno mysql_errno();        
                die( 
    $this->fehlermeldung "<b>ERROR:</b> ".mysql_error() : "DB Query konnte nicht gesendet werden." );
            }            
        }
        
        
    /**
        * @access privat
        * @var string
        */    
        
    function _select_db($db)
        {
            if ( ! 
    mysql_select_db($db) )
                die( 
    $this->fehlermeldung "<b>ERROR:</b> ".mysql_error() : "DB konnte nicht ausgew&auml;hlt werden." );
        }
        
        
    /**
        * @access privat
        */    
        
    function _error() 
        {       
            return !(bool)
    $this->_result;
        }
        
        
    /**
        * @access global
        * @return array
        */        
        
    function fetch() 
        {         
            return 
    $this->_error() ? null mysql_fetch_array($this->_result);       
        }    

    Verbesserungsvorschläge oder Meinungen sind willkommen.
    Danke.
    Zuletzt geändert von martinm79; 22.10.2005, 21:07.
    Gut geraten ist halb gewußt.

  • #2
    hmm,

    was spricht gegen

    $DB = new DB();
    $DB->Query(1);
    $DB->Query(2);
    ...

    Wie sendest du zwei queries ab?

    Kommentar


    • #3
      Original geschrieben von TobiaZ
      hmm,

      was spricht gegen

      $DB = new DB();
      $DB->Query(1);
      $DB->Query(2);
      ...
      Ich kenne ja jetzt nicht die class db, aber komme langsam schon ins grübeln.
      Aber wenn man z.b. in einem script nur 1 mal DELETE anwendet:
      PHP-Code:
      new query("DELETE.."); 
      ist es ja schön kurz.


      Original geschrieben von TobiaZ
      Wie sendest du zwei queries ab?
      Theoretisch so:
      PHP-Code:
      $objekt_select = new query("select ....;");
      $objekt_update = new query("update......"); 
      Aber ich glaube da steckt mein Denkfehler. Ich muß das erstmal kurz testen....
      Gut geraten ist halb gewußt.

      Kommentar


      • #4
        Aber ich glaube da steckt mein Denkfehler. Ich muß das erstmal kurz testen...
        Oh ja...

        Kommentar


        • #5
          Habs getestet.
          Die Verbindungskennung würd logischerweise zum 2. mal aufgebaut, weil es ja ein neues objekt ist.
          Soweit hatte ich wohl noch nicht gedacht.
          Wenn denn müßte man wohl die Kennung als Objekt weiterreichen, was ja denn albern wäre.

          Denn ist wohl die Variante, wo mysql_connect im Konstruktor der Klasse ist, die bessere Lösung.

          So wie dein Beispiel:
          PHP-Code:
          $DB = new DB();
          $DB->Query(1);
          $DB->Query(2); 
          Denn muß ich's wohl bisschen umbauen.
          Danke für den Hinweis.
          Gut geraten ist halb gewußt.

          Kommentar


          • #6
            und unfertige und nicht ausgereifte snippets gehören auch nicht in die code-schnipel.

            *move*
            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

            Lädt...
            X