auf zweite Datenbank zugreifen

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

  • auf zweite Datenbank zugreifen

    Hallo Zusammen,

    habe Problem auf eine zweite Datenbank zuzugreifen.

    Über eine Klasse dbconn werden die grundlegenden datenbakzugriffe gehandelt. Diese wird über eine session.php in die index includet.
    PHP-Code:
    <?
    /**
     * functions.php
     *
     * beinhaltet die Grundfunktionen des Session-Mangements insbes. Datenbankverbindung
     *
     * written by: Timo Trallala, germany (2005)
     */

    include("config/constants.php");

    class dbconn
        {
        var $connect;

        /* dbconn - The Class-Construktor */

        function dbconn()
            {
            $this->connect=mysql_connect(host, user, pass) or die(mysql_error());
            mysql_select_db(name, $this->connect) or die(mysql_error());

            $this->connect1=mysql_connect(host_ext, user_ext, pass) or die(mysql_error());
            mysql_select_db(name_ext, $this->connect1) or die(mysql_error());
            }
        /* liefert Datenbank Query */

        function query($query) { return mysql_query($query, $this->connect); }
        }

    ;

    $db=new dbconn;
    ?>
    jetzt ist es aber notwendig, auf eine zweite datenbank auf einem anderen Server zuzugreifen, bzw. dort ein Paar inserts/ updates und deletes durchzuführen. Jetzt hab ich mir gedacht- was sich als Trugschluss herausstellte, eine weitere Funktion db_functs_ext.php einzubinden:
    PHP-Code:
     <?
    /**
     * db_ext_functions.php
     *
     * steuert Datenbank-Operationen auf externer Datenbank
     *
     * written by: Timo Trallala, germany (2005)
     */

    include("config/constants.php");

    class dbconn_ext
        {
        var $connect;

        /* dbconn_ext - The Class-Construktor */

        function dbconn_ext()
            {
            $this->connect=mysql_connect(host_ext, user_ext, pass_ext) or die(mysql_error());
            mysql_select_db(name_ext, $this->connect) or die(mysql_error());
            }

        /* liefert Datenbank Query */

        function query($query) { return mysql_query($query, $this->connect); }
        }

    ;

    $db_ext=new dbconn_ext;
    ?>
    Einbindung über session.php
    PHP-Code:
    <?php
    /**
     * session.php
     *
     * Herzstück des Session-Managements: startet, beendet und verwaltet Sitzungen
     *
     * written by: Timo trallala, germany (2005)
     */
    include ("cms_functions.php");
    include (
    "db_ext_functions.php");
    include (
    "db_functions.php");
    include (
    "form.php");
    include (
    "mailer.php");

    class 
    Session
        
    {
        var 
    $username;
        var 
    $userlevel;
        var 
    $language;
        var 
    $loggedIn;
        var 
    $userinfo = array();
        var 
    $url;
        var 
    $referrer;
        var 
    $shopping_cart;

        
    /* Session - The Class-Construktor  */

        
    function Session()
            {
            
    $this->time=time();
            
    $this->startSession();
            }

        
    /* startet session & bestimmt, ob der User bereits eingeloggt ist
           und setzt die session-Varaiablen */

        
    function startSession()
            {
            global 
    $db;

            
    /*  startet aktuelle Session */
            
    session_start();

            
    /* es wird bestimmt, ob User eingeloggt ist */
            
    $this->loggedIn=$this->checkLogin();
    Bekomm allerdings so ne fehlermeldung: Cannot Redeclare dbconn
    Besten dank für etwaige Hinweise

    Besten Dank für etwaige nützliche Hinweise
    mfG
    derTrallala
    Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

  • #2
    Na, ist doch eindeutig die fehlermeldung. natürlich kannst und musst(!) du die klasse nicht zwei mal definieren. Es reicht vollkommen, wenn du sie zwei mal aufrufst.

    Kommentar


    • #3
      naja wiegesagt, ich muss auf eine zweite Datenbank zugriefen.

      wenn ich jetzt aber dbconn aufrufe, wird die verbindung zu DB1 hergestellt. Muss allerdings an einigen wenigen stellen ein paar Aktionen an einer 2. DB durchführen. Da hilft mir dbconn ja nicht weiter, muss allerdings weiter aktiv sein

      mfG
      derTrallala
      Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

      Kommentar


      • #4
        nur weil du eine klasse ein zweites mal benutzen willst, musst du sie aber nicht gleich ein zweites mal definieren. Mit deinen konstanten hast du dir aber ein ei gelegt. das macht die klasse ziemlich unflexibel, weil du die konstanten ja nicht neu belegen kannst.

        kannst die klasse natürlich unter anderem namen (mit anderen konstanten) neu definieren. Sinn von OOP geht da zwar irgendwo verloren.

        Besser ist, du übergibst der klasse (optionale) parameter, die anstatt der konstanten verwendet werden. dann kannst du sie ein zweites mal verwenden, so wie es von php gedacht ist,

        Kommentar


        • #5
          Besten dank erstmal

          kann ich den quasi 2 Verbindungen zu zwei DBs offen haben? Über DB1 wird unter anderem das menue gesteuert. Über db2 werden z.b. die Newsletter verwaltet. Kann ich leider nicht ändern, da dies nicht in meinem 'Dunstkreis liegt'.

          derTrallala
          Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

          Kommentar


          • #6
            Original geschrieben von TobiaZ
            Na, ist doch eindeutig die fehlermeldung. natürlich kannst und musst(!) du die klasse nicht zwei mal definieren. Es reicht vollkommen, wenn du sie zwei mal aufrufst.
            Mir ist klar, was die Fehlermeldung bedeutet, aber in den Codeschnippseln kann ich keine doppelte Definition ein und derselben Klasse finden. Er hat sie doch umgenannt (auch wenn sie im Endeffekt das gleiche tut).

            @Timo: Ich glaube, TobiaZ meint, dass du dem Konstruktor ein paar Variablen (oder auch ein Array) mitgeben sollst. Einfach sowas wie

            function __construct($host, $user,$pass) ...

            Gruß

            Le Cheffe

            Kommentar


            • #7
              ja danke das versteh ich!

              Allerdings noch mal zu der vorherigen Frage: Wenn das so mache wie oben beschrieben, führt eben jene Einbindung von db_extfunctions.php schlicht und ergreifend dazu, das die Verbindung zu dbconn geschlossen wird und nun nur db_ext aktiv ist.

              Ich muss allerdings, während dbconn aktiv ist, auch auf eine zweite DB zugreifen können. Ist dies technisch möglich? Ja oder !ja

              dann geh ich euch auch nicht weiter auf die Nerven

              mfG
              derTrallala
              Zuletzt geändert von Timo Trallala; 11.01.2006, 11:27.
              Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

              Kommentar


              • #8
                Moin,

                Du kannst einfach zwei Instanzen deiner Klasse erzeugen:
                PHP-Code:
                $db1 = new dbconn("127.0.0.1","root","","datenbankname1");
                $db2 = new dbconn("127.0.0.1","root","","datenbankname2"); 
                Deine Klasse änderst du so ab, dass du in der Function dbconn() vier Parameter übergibst -> dbconn($host,$user,$password,$dbname);

                Diese Parameter musst nun auch innerhalb der Klasse verwenden anstatt der Konstanten und schon ist die Klasse wiederverwendbar, ohne die Implementation ändern zu müssen für jedes Projekt.

                Gruß Thomas

                Kommentar


                • #9
                  auch ne nette idee-> passiert allerdings folgendes:

                  $db1 wird durch $db2 ersetzt. Das ist allerdings unerwünscht. Es soll $db1 weiterlaufen und zusätzlich $db2!!!

                  Ergo eine parallele verbindung zu 2 unterschiedlichen datenbanken!

                  MfG
                  derTrallala
                  Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

                  Kommentar


                  • #10
                    Vielleicht solltet du deiner Funktion "query" auch mit übergeben, auf welch der beiden DB's du zugreifen willst?
                    mfg - sagg

                    Kommentar


                    • #11
                      Original geschrieben von Timo Trallala
                      $db1 wird durch $db2 ersetzt.
                      Sicher? Woran merkst du das denn?
                      Und welche PHP-Version setzt du ein?

                      @sagg: Wieso? $this->connect tuts auch.
                      Zuletzt geändert von onemorenerd; 11.01.2006, 12:31.

                      Kommentar


                      • #12
                        ad1)
                        plötzliches auftretende Fehlermeldung: supplied argument is not a valid MySQL result resource; es wird notwendige DB nicht mehr angesteuert!
                        Keine Navigation und Menue mehr vorhanden

                        php-version: 5.0.3

                        mfg
                        derTrallala
                        Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

                        Kommentar


                        • #13
                          Original geschrieben von onemorenerd
                          @sagg: Wieso? $this->connect tuts auch.
                          Ich meinte beim ersten der beiden Skripte, bei dem zwei Verbindungen in der dbconn aufgebaut werden.
                          Bei dem würde es mir jedenfalls logisch erscheinen, bei dem zweiten natürlich nicht.
                          Wie gesagt:
                          mfg - sagg

                          Kommentar


                          • #14
                            O.K.

                            jetzt hab ich Verbindungsparameter dem Konstruktor übergeben...
                            aber was soll ich sagen...keine Anzeichen auf Besseerung!
                            PHP-Code:
                            class dbconn
                                
                            {
                                var 
                            $connect;

                                
                            /* dbconn - The Class-Construktor */

                                
                            function dbconn($host$user$pass$name)
                                    {
                                    
                            $this->connect=mysql_connect($host$user$pass) or die(mysql_error());
                                    
                            mysql_select_db($name$this->connect) or die(mysql_error());


                                    }



                                
                            /* liefert Datenbank Query */

                                
                            function query($query) { return mysql_query($query$this->connect); }
                                }

                            ;

                            $db=new dbconn(hostuserpassname);
                            $db_ext=new dbconn(host_extuser_extpass_extname_ext);
                            ?> 
                            mfG
                            derTrallala
                            Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

                            Kommentar


                            • #15
                              Dann schreibe dir eine Methode zum wechseln der Datenbank, ohne die Verbindung neu aufzubauen.

                              PHP-Code:
                              function select_db($dbname)
                              {
                                 
                              mysql_select_db($dbname);

                              Je nachdem welche DB du gerade brauchst wechselst du einfach.

                              Kommentar

                              Lädt...
                              X