[OOP] Mehrere Datenbankverbindungen mit gleichem Account aber verschiedenen DBs

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [OOP] Mehrere Datenbankverbindungen mit gleichem Account aber verschiedenen DBs

    hi,

    ich habe atm ein theoretisches problem, dass ich nochnicht praktisch getestet habe :
    eine anwendung öffnet mehrere verbindungen zum gleiche datenbank server mit gleichem username/passwort (mysql_connect), aber wählt jeweils eine andere datenbank aus.

    jetzt frage ich mich nur, ob die im endeffekt gleiche verbindung die gleiche ressource id nutzt und ich somit defakto nur 1ne verbindung habe.

    das problem ist dann halt, wenn ich verschiedene datenbanken auswähle mit mysql_select_db, dass es dann ein chaos geben könnte, da es im endeffekt nur 1ne verbindung ist.


    bsp :

    $db0 = new DB('db_settings');
    $db1 = new DB('db_kunde1');
    $db2 = new DB('db_kunde2');
    $db3 = new DB('db_kunde3');

    bei jedem gleicher host, username, passwort.
    also was wird passieren, sind es wirklich getrennte verbindungen oder gehts schief, wie ich es befürchte ?


    hoffe ihr versteht was ich meine....
    danke schonmal

  • #2
    wenn du alles in klassen abarbeitest (inkl. Methoden für sql-anfragen), so sollte es klappen:
    PHP Code:
    $db0 = new DB('db_settings');
    $select0 $db0 -> doSelect ($query);
    $db1 = new DB('db_kunde1');
    $select1 $db1 -> doSelect ($query); 
    (doSelect als abfrage-methode deiner klassen, ein beispiel) allerdings kenne ich deine klasse nicht.

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Comment


    • #3
      also im konstruktor wird mysql_connect() und mysql_select_db() ausgeführt.

      ich mach mir halt sorgen um das php interne handeln von verbindungen

      hiermal ein kleiner auszug aus der class :

      PHP Code:
      class MySql_default
          
      implements Database{
          
          
      // Interne Ressource ID
          
      private $_link;
          private 
      $_result;
          private 
      $_statement;
          private 
      $_prefix;
          
          
      /* *****************************
          *     Konstruktor
          * ******************************/    
          
      function MySql_default($host$prefix$user$name$passwd$persistent){
              
      // Verbindung aufbauen
              
      $this->_prefix $prefix;
              
      // persistent ?
              
      if ($persistent){
                  
      $this->_link mysql_pconnect($host$user$passwd);    
              }else{
                  
      $this->_link mysql_connect($host$user$passwd);
              }        
              
              
      // wenn keine Verbindung möglich, dann Exception werfen
              
      if (!$this->_link){
                  throw new 
      DatabaseException('Datenbankfehler - '.mysql_error(), 301);
              }
              
              
      // Datenbank auswählen
              
      $_db mysql_select_db($name);
              
              
      // wenn keine Datenbank ausgewählt werden kann / nicht existiert
              // Exception werfen
              
      if (!$_db){
                  throw new 
      DatabaseException('Datenbankfehler - '.mysql_error(), 302);
              }
          }

      [......]

      Comment


      • #4
        jetzt frage ich mich nur, ob die im endeffekt gleiche verbindung die gleiche ressource id nutzt und ich somit defakto nur 1ne verbindung habe.
        Besser wäre es (meiner Meinung nach auch performanter) wenn du nur eine Verbindung öffnest und dann auf die Datenbanken über Datenbank.Tabelle in der Abfrage zugreifst. Du kannst (falls nötig) auch einen kleinen "Parser" schreiben der die Datenbank noch in die Querys reinhängt.
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Comment


        • #5
          Original geschrieben von tontechniker
          Besser wäre es (meiner Meinung nach auch performanter) wenn du nur eine Verbindung öffnest und dann auf die Datenbanken über Datenbank.Tabelle in der Abfrage zugreifst. Du kannst (falls nötig) auch einen kleinen "Parser" schreiben der die Datenbank noch in die Querys reinhängt.
          also habs mal ausprobiert, gleiche Ressource ID^^
          aber hast schon recht, sollte geringfügig performanter sein

          Comment


          • #6
            Aus dem Handbuch:
            resource mysql_connect ( [string $Server [, string $Benutzername [, string $Benutzerkennwort [, bool $neue_Verbindung [, int $client_flags]]]]] )

            Wenn du wirklich mit mehreren Verbindungen(gleichzeitig) arbeiten willst, solltest du PHP das auch mitteilen!!
            Wir werden alle sterben

            Comment


            • #7
              also habs mal ausprobiert, gleiche Ressource ID^^
              Und? Und wenn du sowieso was objektorientiertes hast - warum nicht mit PDO?
              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

              Comment


              • #8
                Original geschrieben von tontechniker
                Und? Und wenn du sowieso was objektorientiertes hast - warum nicht mit PDO?
                Weils lahm ist?
                mysqli, wenn man nicht mehr Abstraktion braucht sage ich mal

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Comment


                • #9
                  Original geschrieben von ghostgambler
                  Weils lahm ist?
                  mysqli, wenn man nicht mehr Abstraktion braucht sage ich mal
                  Es gibt auch viele Leute, die mysqli ablehen, weil's wieder mal kein "richtiges" OO geworden ist, sondern der PHP-übliche Mischmasch.
                  Deshalb hört man teilweise auch schon, dass mysqli "tot" sein soll, und PDO die Zukunft gehöre, auch was das ansprechen von MySQL angeht, wenn's OO sein soll.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Comment


                  • #10
                    Deshalb hört man teilweise auch schon, dass mysqli "tot" sein soll, und PDO die Zukunft gehöre, auch was das ansprechen von MySQL angeht, wenn's OO sein soll.
                    PDO soll in PHP 6 in die Standardumfang aufgenommen werden. mysqli ist zwar ganz schön - Prepared Querys und Stored Procedures sind mit PDO aber wesentlich einfacher.
                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Comment

                    Working...
                    X