Sophie: Zwei Datenbankverbindungen

Hallo,

ich verbinde mich so zur Datenbank

$mysqli = new mysqli("localhost", "xxxx", "xxxx", "xxxx");

if ($mysqli->connect_error) {
	echo "Fehler bei der Verbindung: " . mysqli_connect_error();
	exit();
	
}
	
if (!$mysqli->set_charset("utf8")) {
	echo "Fehler beim Laden von UTF8 ". $mysqli->error;
}

Wie gehe ich vor, wenn ich zwei Datenbanken ansprechen möchte? Beide liegen beim gleichen Provider.

  1. Hello,

    Unabhängig von weiteren versäumten Möglichkeiten:

    $_mysqli = array();  
    
    $_mysqli[1] = new mysqli("localhost", "xxxx", "xxxx", "xxxx");
    #[...];    
    }
    
        $_mysqli[2] = new mysqli("localhost", "yyyy", "yyyy", "yyyy");  
        #[...];    
    }
    

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es
    Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
    1. Hallo Tom,

      ich verstehe nicht was du mit damit sagen willst. Mache ich es so, erhalte ich Fehlermeldungen

      <?php
      
          $_mysqli = array();
      
          $_mysqli[1] = new mysqli("localhost", "xxx", "xxxx", "xxxx");
      
      	if ($mysqli->connect_error) {
      	  echo "Fehler bei der Verbindung: " . mysqli_connect_error();
      	  exit();
      	}
      	
      	if (!$mysqli->set_charset("utf8")) {
      	  echo "Fehler beim Laden von UTF8 ". $mysqli->error;
      	}
      
          $_mysqli[2] =  new mysqli("localhost", "xxx", "xxx", "xxxx");
      
      	if ($mysqli->connect_error) {
      	  echo "Fehler bei der Verbindung: " . mysqli_connect_error();
      	  exit();
      	}
      	
      	if (!$mysqli->set_charset("utf8")) {
      	  echo "Fehler beim Laden von UTF8 ". $mysqli->error;
      	}
      
      ?>
      
      1. Tach!

        ich verstehe nicht was du mit damit sagen willst.

        Jedes mysqli-Objekt muss in seiner eigenen Variable abgelegt werden und zur Unterscheidung nimmst du die jeweilige Variable. Tom hat nun keine eigenständigen Variablen genommen sondern die beiden Objekte als Einträge in einem Array abgelegt. Hat die Eigenschaft, dass du beliebig viele solcher Objekte erzeugen kannst und die nicht alle mit individuellem Namen irgendwo rumliegen, sondern in dem Array gebündelt sind. Muss man so nicht machen, wenn es nur zwei mit konkreten Aufgaben sind, kann man da auch zwei dem Verwendungszweck nach benannte Variablen nehmen.

        Mache ich es so, erhalte ich Fehlermeldungen

        Ja, weil du Variablen verwendest, die nicht existieren. Die Verbindungen sind in den Variablen/Array-Einträgen $_mysqli[1] und $_mysqli[2] abgelegt und diese Variablen müssen auch verwendet werden, wenn man auf die Eigenschaften und Methoden des jeweiligen Ojekts zugreifen möchte. Oder eben, wenn du kein Array sondern separate Variablen nimmst, dann musst du im weiteren Verlauf diese Variablen nehmen.

        dedlfix.

      2. $_mysqli[1] = new mysqli("localhost", "xxx", "xxxx", "xxxx");
        if ($mysqli->connect_error) 
        ...
        

        Seit wann haben Arrays eine connect_error-Eigenschaft?

        EDIT: LOL - man soll einen Thread hier nicht länger stehen lassen bevor man antwortet 😉 Habe währenddessen mit meinem lokalen MYSQL Server experimentiert...

        1. So, habe gerade selbst nochmal experimentiert: Es ist technisch überhaupt kein Problem, mehrfach zum DB-Server zu connecten, selbst wenn man beide Male den gleichen User verwendet.

          Die Frage ist dagegen, ob es NÖTIG ist. Wenn es darum geht, Zugriffe auf zwei Databases auf dem gleichen Server zu machen, und der User, mit dem Du connectest, Rechte für beide Databases hat, dann kannst Du auch einfach die Tabellennamen mit dem Databasenamen qualifizieren:

          SELECT ID, NAME
          FROM WORLD.CITY
          

          Rolf