Vorsicht bei mysql_connect und Vielfachverbindungen

Eine der automatischen „Goodies“ bei mysql_connect (wen man es denn schon nutzen muss, warum auch immer), ist, dass, wenn man mysql_connect mit den gleichen Informationen bestückt, diese Funktion die gleiche Verbindungsid zurückgibt wie beim ersten mal … es wird also keine zweite Verbindung aufgebaut.

Das Problem ist nun leider, dass der, der die zweite Verbindung öffnen möchte, diese Informationen _ganz genau_ braucht, denn sonst erhält man unter Umständen trotzdem eine zweite Verbindung, obwohl man die vermeindlich gleichen, aber nicht selben Parameter benutzt.

Beispielcode:

$dbserver1 = '127.0.0.1';
$dbserver2 = 'localhost';

$dbuser1 = 'root';
$dbuser2 = 'Root';
$dbpass = '';

$db1 = mysql_connect($dbserver1, $dbuser1, $dbpass);
$db2 = mysql_connect($dbserver2, $dbuser2, $dbpass);
$db3 = mysql_connect($dbserver1, $dbuser2, $dbpass);
$db4 = mysql_connect($dbserver2, $dbuser1, $dbpass);
$db5 = mysql_connect($dbserver1, $dbuser1, $dbpass);

var_dump($db1, $db2, $db3, $db4, $db5);

Ausgabe:

resource(7) of type (mysql link)
resource(9) of type (mysql link)
resource(11) of type (mysql link)
resource(13) of type (mysql link)
resource(7) of type (mysql link)

Hier zeigt sich, dass insg. 4 verschiedene Connection-Ids zurück gegeben wurden, $db5 ist zur Kontrolle und zeigt, dass nur die exakt selben Parameter zum gewünschten Ergebnis kommen, nämlich die selbe ID zu benutzen, die schon bei $db1 erzeugt wurde.
Im Realfall würde dies nun 4 Prozesse bedeuten, von denen 3 überflüssig sind und nur den Server belasten … pro Aufruf im schlimmsten Fall.

2 Gedanken zu „Vorsicht bei mysql_connect und Vielfachverbindungen

  1. KingCrunch

    Mal abgesehen davon, dass ich das Verhalten absolut nachvollziehbar finde (speziell das mit dem Benutzernamen: Im Linuxumfeld ist normalerweise alles case-sensitive und „roor“ und „Root“ sind zwei verschiedene Benutzer ;)): Man sollte sowieso die mysql-Extension nicht mehr verwenden.

    Antworten
  2. Sascha Presnac

    Ich finde das recht interessant, denn intuitiv würde ich davon ausgehen, dass es egal ist, ob ich die IP benutze oder den alias localhost und unter Windows ist es egal, ob ich „root“ oder „Root“ schreibe. Daher entstand der Fehler im Posting vorher mit Mehrfachen Verbindungen bei webEdition.
    Ich bin nur sehr überrascht, dass zwar die Verbindung zur DB mit root und Root funktioniert (sowohl Windows wie Linux), aber zwei Verbindungen aufgebaut werden, obwohl es ja der selbe User ist (in mysql ist nur „root“ hinterlegt.

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert