Ich verbinde mich mit einer mySQL-Datenbank mit PDO. Wenn die Anmeldung falsch ist, gibt es einen ganzen Stack von Fehlern, obwohl ich try-catch verwendet habe.Fehler "Uncaught PDOException", obwohl ich try-catch
try
{
$this->db = new PDO("mysql:host='host' dbname='db' charset=utf8", $username, $password);
// Tried both with and without these attributes
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $e)
{
echo "Database connection error: " . $e->getMessage());
exit;
}
Wenn dieser Code ausgeführt wird - mit einer nicht vorhandenen Datenbankname - bekomme ich folgende Fehlermeldung:
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [1044] Access denied for user 'user' to database 'db' in .....
Er druckt alle Daten aus. Falls ein Fehler in der Anmeldung auftritt, möchte ich nur, dass der Code beendet wird und eine Nachricht in eine Protokolldatei geschrieben wird.
Warum fängt die fangen diese Ausnahme nicht?
Ich verwende einen lokalen Apache-Server auf meinem Windows-Computer. Vielleicht liegt das an einer Fehlkonfiguration?
Jede Hilfe wird geschätzt.
Führen Sie diesen Code in einem Namespace aus? Versuchen Sie vielleicht, vor PDOException ('\ PDOException') einen Backslack einzufügen, um den Root-Namespace zu verwenden? Wenn Sie dies nicht tun, durchsucht es Ihren aktuellen Namespace (zB. 'KMK \ apps \ PDOException') – h2ooooooo
das könnte Ihnen helfen: https://stackoverflow.com/questions/10890813/pdoexception-not-being-caught – user1915746
Vielen Dank @ h2ooooooo. Der Code befand sich in einem Namespace. Wenn Sie es als Antwort schreiben, werde ich es als das richtige markieren – KMK