Melvin Cowznofski: Falsche Fehlermeldung bei MySQL Verbindung via PDO

Hallo,

ich stehe gerade etwas ratlos vor einer falschen Fehlermeldung, deren Zustandekommen ich mir nicht erklären kann. Ich stelle die Verbindung zur MySQL Datenbank via PDO her. Dazu verwende ich die beiden PHP Ressourcen "db_config.php" und "PDO_connect.php", die folgendermaßen aufgebaut sind:

db_config.php:

<?php  
   $host     = 'localhost';  
   $dbname   = 'db_01';  
   $username = 'user_db_01';  
   $password = 'user01';  
?>

PDO_connect.php:

<?php  
   $dsn      = 'mysql:host='.$host.';dbname='.$dbname.';charset=utf8';  
   $timezone = 'SET time_zone = "+00:00"';  
   try  
      {  
         $db =  new PDO($dsn, $username, $password);  
         $db -> SetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
         $db -> exec($timezone);  
      }  
   catch(PDOException $e)  
      {  
         echo $e -> getMessage();  
         die();  
      }  
?>

Wenn ich diese beiden Ressourcen nun mit einem include_once(); in einer anderen einbette, wird wie erwartet die Verbindung zur DB korrekt aufgenommen. Soweit, so gut.

Wenn ich jetzt in der 'db_config.php' _absichtlich_ den Namen der DB falsch schreibe, zB. "foo" - und so eine DB gibt es bei mir nicht - dann würde ich als Fehlermeldung der PDOException folgendes erwarten:

SQLSTATE[HY000] [1049] Unknown Database 'foo'

Stattdessen lese ich aber:

SQLSTATE[HY000] [1044] Access denied for user 'user_db_01'@'localhost' to database 'foo'

Und diese Fehlermeldung erwarte ich eigentlich nur dann, wenn User oder Passwort nicht stimmen. Kann mir bitte jemand sagen, wieso ich trotzdem diese Meldung bekomme und nicht die von mir erwartete?!

Vielen Dank im Voraus!

Mit lieben Grüßen

Melvin Cowznofski

--

Melvin Cowznofski
What – me worry?
  1. Hi,

    SQLSTATE[HY000] [1044] Access denied for user 'user_db_01'@'localhost' to database 'foo'

    Und diese Fehlermeldung erwarte ich eigentlich nur dann, wenn User oder Passwort nicht stimmen. Kann mir bitte jemand sagen, wieso ich trotzdem diese Meldung bekomme und nicht die von mir erwartete?!

    Vielleicht, weil in der Zugriffsrechte-Tabelle schlicht und einfach nach einem Datensatz mit Username user_db_01 und Datenbankname foo gesucht wird – und wenn keiner gefunden wird, wird daraus der Schluss gezogen, dass der Nutzer user_db_01 keinen Zugriff auf die Datenbank foo hat.

    Dieser Schritt der Zugriffskontrolle erfolgt vermutlich noch bevor überhaupt nach der Datenbank an sich gesucht wird. Ob das aus „Bequemlichkeit“ unterlassen wird, wenn schon festgestellt wurde, dass der Nutzer eh keinen Zugriff haben kann, oder ob da noch eine andere Motivation dahinter steckt, kann ich dir nicht sagen.

    MfG ChrisB

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    1. Hallo Chris,

      ja, das wäre eine mögliche logische Erklärung. Ich habe mir das YOUTUBE Video rausgesucht, mit dessen Hilfe ich mich damals erstmalig mit dem Thema beschäftigt habe. Und da sieht man bei Minute 09:45, wie die Fehlermeldung kommt, die ich auch bei mir erwartet hätte. Komisch.

      Naja, die Welt wird sich trotzdem weiterdrehen. :)

      Mit lieben Grüßen

      Melvin Cowznofski

      --

      Melvin Cowznofski
      What – me worry?
  2. Hallo,
       $dsn      = 'mysql:host='.$host.';dbname='.$dbname.';charset=utf8';

    Sicher?

    Mein Code sieht ein bischen anders aus und der nennt die Fehler mit dem richtigen Namen

      
            $this->DBH = new PDO(sprintf("mysql:dbname=%s;host=%s", $cred['base'], $cred['host']),  
                $cred['user'], $cred['pass'],  
                array(  
                    PDO::ATTR_TIMEOUT => 2,  
                ));  
            $this->DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
    
    

    Schöne Grüße.

    1. Hallo hotti,

      Sicher?

      Ja, ganz sicher. Arbeite damit, seit ich PDO verwende und hatte noch nie ein Problem.
      Auch die Zeitzoneneinstellung und die utf-8 Kompatibilität funktionieren so wunderbar.

      Diese unlolische Fehlermeldung habe ich eigentlich eher zufällig beim Herumspielen wegen etwas völlig anderem entdeckt.

      Mit lieben Grüßen

      Melvin Cowznofski

      --

      Melvin Cowznofski
      What – me worry?