11. PHP Datenbank Verbindung
In PHP existieren drei Varianten um auf eine MySQL Datenbank zuzugreifen.
- MySQL: Seit PHP7 nicht mehr möglich
- MySQLi (MySQL Improved Extension): Seit PHP 5
- PDO (PHP Data Objects): Aktuellste Schnittstelle und unabhängig von dem verwendeten Datenbanksystem. Der Zugriff erfolgt allerdings ausschließlich objektorientiert und ist daher für AWP11 Unterricht nicht geeignet.
MySQLi Grundlagen
Verbindung herstellen
$hostname = '127.0.0.1';
$username = 'Paul';
$password = '';
$databasename = 'meineDatenbank';
$Con = mysqli_connect($hostname, $username, $password, $databasename);
Prüfung ob Verbindung erfolgreich hergestellt wurde die()
und exit()
sind dabei synonym verwendbar.
if(!$Con){
exit("Datenbank Verbindungsfehler: " . mysqli_connect_error());
}
Charset festlegen damit Umlaute z. B. bei “Zutritt gewährt” korrekt in die DB geschrieben werden.
mysqli_set_charset($Con, "utf8");
SQL Query-String erstellen
Insbesondere komplexe SQL Statements sollten zuvor in einer Variable gespeichert werden. Dies sorgt für einen übersichtlicheren Quellcode.
$Query = "INSERT INTO Kunden(K_KName, K_KStrasse) VALUES('";
$Query .= $Name."','";
$Query .= $Strasse."')";
Oder:
$Update = "UPDATE user SET email = $EMail WHERE id = $UserID";
Via var_dump($Query)
lässt sich das SQL Statement auf Fehler überprüfen.
Sie sollten niemals direkt $_POST
Inhalte an den Datenbankserver schicken. In dem oberen Beispiel ist davon auszugehen, dass $Name
und $Strasse
bereits auf Schadcode geprüft wurde. Ansonsten besteht die Gefahr einer SQL Injection. Die Verwendung von Prepare-Statements ist zu empfehlen. Nähere Informationen hierzu unter: php-einfach MySQLi Crashkurs
SQL Query-String absenden
DQL Abfragen
$Result = mysqli_query($Con, $Query);
$Result
enthält eine Menge von Datensätzen (= Recordset) oder im Falle eines Fehlers den Wert False
. Die Datensätze könnten beispielsweise folgendermaßen ausgegeben werden:
if ($Result != false) {
foreach ( $Result as $Data) {
echo $Data["Name"]. " - ";
echo $Data["Hund"]. " - <br>";
}
}
DDL/DML Statements
mysqli_query($Con, $Update);
Auch bei DDL/DML Abfragen ist zu prüfen, ob das Statement erfolgreich ausgeführt wurde. Zum Beispiel so:
if (mysqli_query($Con, $Update) == false) {
echo "Update-Fehler: " . mysqli_error($Con);
};
Trennen der Datenbankverbindung
Je hergestellte Verbindung soll immer sauber getrennt werden, nachdem sie nicht mehr benötigt wird.
mysqli_close($Con);