Einführung
Eine Datenbank Verbindung kann Fehler haben oder ausfallen,
deshalb sollte jede Fehlermeldung aus Sicherheitsgründen abgefangen werden!
deshalb sollte jede Fehlermeldung aus Sicherheitsgründen abgefangen werden!
Fehler beschreibung für Test
Zwischen den letzten beiden '' ist ein Leerzeichen, das darf nicht sein!
Verbindungs-Fehler
<?php
2 if (file_exists('db_connect.php')) { require('db_connect.php'); }...
5 $pdo = new PDO('mysql:host=localhost;dbname=test_db', 'root', ' ');
...
8 ...
?>
Fehler-Meldung
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) in C:\xampp\htdocs\html\meinOrdnername\db_connect.php:5 Stack trace: #0 C:\xampp\htdocs\html\meinOrdnername\db_connect.php(5): PDO->__construct('mysql:host=loca...', 'root', Object(SensitiveParameterValue)) #1 C:\xampp\htdocs\html\meinOrdnername\index.php(2): require('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\html\meinOrdnername\db_connect.php on line 5
Anhand dieser Fehler-Meldung werden zuviele Daten preisgegeben!
Verbindungs-Fehler bestimmen
<?php
Verbindungs-Fehler abfangen
try{
Datenbank Verbindung
$pdo = new PDO('mysql:host=localhost;dbname=test_db', 'root', ' ');Attribute kann / muß nicht
$pdo->setAttribute (PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);$pdo->setAttribute (PDO::ATTR_EMULATE_PREPARES,false);
Verbindungs-Fehler abfangen Meldung
}catch (PDOException $dvp)
{
die ("Datenbank Problem! ".$dvp->getMessage());
}
?>
Abgefangen mit getMessage()
Datenbank Problem! SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
Diese Meldung ist schon besser, aber immernoch zu viele Daten!
Verbindungs-Fehler bestimmen
<?php
Verbindungs-Fehler abfangen
try{
Datenbank Verbindung
$pdo = new PDO('mysql:host=localhost;dbname=test_db', 'root', ' ');
Verbindungs-Fehler abfangen Meldung
}catch (PDOException $dvp)
{
die ("Datenbank Problem! Fehler in Zeile: ".$dvp->getLine());
}
?>
Abgefangen mit getLine()
Datenbank Problem! Fehler in Zeile: 5
Das ist für eine Datenbank-Verbindung überflüssig, weil es ja meist nur eine gibt!
Verbindungs-Fehler bestimmen
<?php
Verbindungs-Fehler abfangen
try{
Datenbank Verbindung
$pdo = new PDO('mysql:host=localhost;dbname=test_db', 'root', ' ');
Verbindungs-Fehler abfangen Meldung
}catch (PDOException)
{
die ("Datenbank Problem!");
}
?>
Abgefangen mit Fehler-Meldung
Datenbank Problem!
Das ist für eine Datenbank Verbindung die bessere Lösung.
Es wird nur gemeldet das es einen Fehler gibt!
Es wird nur gemeldet das es einen Fehler gibt!