rainer: mysql_error bei mehreren connections abfragen

Hallo,

wie kann man eigentlich in php bei mehreren bestehenden mysql connections die ursache eines verbindungsfehlers einer weiteren connection erfahren?

Sprich

$con1 = mysql_connect(); // verbindung ok
if(!$con1)
  echo mysql_error();
// im falle eines verbindungsfehlers wird der error ausgegeben

$con2 = mysql_connect(); // verbindung scheitert
if(!$con2)
  echo mysql_error();
// gibt keinen fehler aus, bezieht in diesem fall  nämlich auf die letzte _erfolgreiche_ verbindung also $con1

Aber mysql_error($con2); klappt auch nicht, denn $con2 ist ja false oder null oder so was in der art.

Also wie kommt man da ran ohne deswegen alle bestehenden erfolgreichen connections beenden zu müssen?

  1. hi,

    $con2 = mysql_connect(); // verbindung scheitert
    if(!$con2)
      echo mysql_error();
    // gibt keinen fehler aus, bezieht in diesem fall  nämlich auf die letzte _erfolgreiche_ verbindung also $con1

    Kann ich nicht nachvollziehen.

    Wird denn überhaupt versucht, eine neue Verbindung aufzubauen - oder von dir unbemerkt die zuvor erstellte weiter benutzt, und deshalb gibt es an dieser Stelle gar keinen Fehler?

    Also wie kommt man da ran ohne deswegen alle bestehenden erfolgreichen connections beenden zu müssen?

    Wenn ich das wie von dir oben skizziert teste, dabei den vierten Parameter von mysql_connect auf true setze, um eine neue Verbindung zu erzwingen - und dann beim zweiten Mal bewusst ein falsches Passwort nutze, bekomme ich an dieser Stelle genau deshalb von mysql_error Mecker, wie zu erwarten.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Wird denn überhaupt versucht, eine neue Verbindung aufzubauen - oder von dir unbemerkt die zuvor erstellte weiter benutzt, und deshalb gibt es an dieser Stelle gar keinen Fehler?

      Doch schon. Im Einsatz sind das ja auch Connections zu unterschiedlichen Datenbanken, ich hatte nur die Verbindungsparameter jetzt weggelassen.

      Wenn ich das wie von dir oben skizziert teste, dabei den vierten Parameter von mysql_connect auf true setze, um eine neue Verbindung zu erzwingen - und dann beim zweiten Mal bewusst ein falsches Passwort nutze, bekomme ich an dieser Stelle genau deshalb von mysql_error Mecker, wie zu erwarten.

      Hmm, also ich fände es auch sinnvoll wenn es so ablaufen würde, aber mir klappt das leider nicht, oder ich mach irgendwo was falsch.
      Aber selbst bei zwei Verbindungen - mit true Parameter - auf die selbe DB klappt das bei mir nicht:

      define("MYSQL_HOST",   "localhost");
      define("MYSQL_USER",   "user");
      define("MYSQL_PASSWORD",  "password");

      $con1 = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD);

      if(!$con1)
       echo "Error1: ".mysql_error();

      $con2 = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD."falsch", true);

      if(!$con2)
       echo "Error2: ".mysql_error();

      Die Dokumentation von mysql_error() lautet auch so: "gibt den Fehler der letzten _hergestellten_ aka erfolgreichen Verbindung zurück". $con1 ist die letzte hergestellte, also bezieht sich echo "Error2: ".mysql_error(); auf diese (zumindest bei mir, getestet mit php 5.2.0).

      Eine kleine Abwandlung des Beispiels:

      $con1 = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD);

      if(!$con1)
       echo "Error1: ".mysql_error();

      mysql_select_db("datenbank-die-es-nicht-gibt", $con1);

      $con2 = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD."falsch", true);

      if(!$con2)
       echo "Error2: ".mysql_error();

      Bei Error2 kommt nun eine Fehlermeldung die sich auf die fehlerhafte Datenbankauswahl bezieht, nicht etwa auf den zweiten Verbindungsaufbau.