Über PHP auf eine Datenbank zugreifen
Als ersten müssen wir eine Verbindung schaffen zwischen unserem PHP-Programm und dem Datenbankserver. Der Datenbankserver kann auch auf einem komplett anderen Computersystem laufen, muss es aber nicht.
Der Aufbau ist immer wieder dasselbe – daher werden wir ein wiederverwendbarer Aufbau in mehreren Daten erstellen.
Daher werden wir gleich von Anfang an 2 Dateien haben:
- index.php
- inc/db.php
Da weitere PHP-Projekte sich auf meiner Festplatte befinden, habe ich für das Projekt „Adressbuch“ ein Unterverzeichnis mit dem Ordnernamen „anw-adressbuch“ angelegt. Für jedes Projekt sein Verzeichnis und man bekommt Ordnung. In diesem Unterverzeichnis gibt es ein weiteres Unterverzeichnis mit dem Namen „public“. In diesem Verzeichnis ist die PHP-Datei gespeichert, über die unsere Anwendung gestartet wird. Dieses Verzeichnis wird auf dem Webserver später direkt angesprungen, wenn jemand die URL eingibt. Offline liegt alles im „htdocs“-Verzeichnis von unserem installieren Webserver XAMPP. So kommt meine Verzeichnisstruktur zustande.

Aus Sicherheitsgründen (später kann das komplette Verzeichnis „inc“ verschoben werden – was später klar wird, wenn es um Sicherheit geht) legen wir den Datenbankaufbau in das Verzeichnis „inc“.
In der Datei „db.php“ im Verzeichnis „inc“ werden wir alle für die Datenbank relevanten Funktionen unterbringen.
Um die Datei „db.php“ in der „index.php“ nutzen zu können muss diese „dazugeladen“ werden. Dies geschieht über die require
-Funktion (ist auch über die PHP-Funktion include
möglich, aber wir wollen einen Programmabbruch, wenn der Dateizugriff und somit die Datenbank nicht zur Verfügung steht).
Inhalt der Datei „index.php“:
<?php
require 'inc/db.php';
?>
Inhalt der Datei „inc/db.php“:
<?php
echo date("H:i:s");
?>
Zum Testen kann nun die „index.php“ im Browser aufgerufen werden (wir machen im Browser einen neuen Reiter auf damit wir später schnell zu phpMyAdmin wechseln können).
Über die URL http://localhost/anw-adressbuch/public/index.php rufen wir unser Programm auf.

Es erscheint die Uhrzeit. Macht man einen Reload, ändert sich die Uhrzeit. Somit wissen wir, dass die Verbindung zwischen der „index.php“ und der „inc/db.php“ klappt.
In der Datei „inc/db.php“ werden im Folgenden dann die Zugriffsdaten für die Datenbank gespeichert.
Der Aufbau ist objekt-orientiert, da dies eine wesentlich saubere Darstellung und somit dies einfacher begreif- und lernbar wird. Die Anweisungen können auch in prozeduralen Stil gemacht werden – in https://php.net werden immer beide Möglichkeiten bei Datenbankzugriffen gezeigt.
Im ersten Schritt müssen wir eine neue Instanz des Objekts mysqli
bilden. Hört sich wilder an, wie es ist:
$db = new mysqli();
Über mysqli()
können verschiedene Parameter übergeben werden, um die Verbindung zur Datenbanksystem herzustellen:
- Server
- Benutzername
- Kennwort
$db = new mysqli('localhost', 'root', 'root');
Das Kennwort unterscheidet sich von Installation zu Installation. Es kann auch sein, dass anstelle des zweiten „root“ keine Angabe notwendig ist oder das in der MySQL-Installation gesetzte Kennwort.
Zusätzlich kann den Namen der Datenbank angegeben werden, mit der gearbeitet werden soll. Zusätzlich deshalb, da ja man mehreren verschiedenen Datenbanken gearbeitet werden kann. Das wird am Anfang definitiv nicht der Fall sein – somit geben wir unsere Datenbank an. Diese ist unserem Beispiel „adressbuch“:
$db = new mysqli('localhost', 'root', 'root', 'adressbuch');
Jetzt möchten wir natürlich wissen, ob der Verbindungsaufbau erfolgreich war oder nicht.
Wenn wir unser bisheriges Programm im Browser aufrufen, passiert nichts, außer das die Uhrzeit sich ändert.

Erst wenn die Datenbank z.B. nicht existiert oder ein Fehler im Benutzername oder Kennwort vorliegt, kommt eine Fehlermeldung.

Es kommt eine Warnung von PHP. Wichtig ist, dass es kein „fatal-error“ ist. Sprich, das Programm bricht nicht ab, was natürlich ins Chaos führen kann. Das Programm führt alle weiteren Anweisungen aus, ohne auf die Datenbank zugreifen zu können. Das ist natürlich unerwünscht!
Aus diesem Grund soll der Fehler abgefangen werden!
Im Regelfall wird in der Produktivumgebung die Fehlermeldungen ausgeschaltet werden, da diese eine Sicherheitsrisiko darstellen. In der jetzigen Fehlermeldung ist der Datenbankname sichtbar und Verzeichnisnamen und Dateinamen. Nichts, was wir der Welt eigentlich mitteilen wollen!
Also schalten wir alle Fehlermeldungen vom System aus über:
<?php
error_reporting(0);
Während der Entwicklung wird man die Fehlerberichte von PHP einschalten um nicht verwirrt zu werden, wenn nichts passiert und nichts tut und keinerlei Fehlermeldung kommt.
<?php
error_reporting(E_ALL);
Um den Fehler anzufangen (catch) müssen wir abfragen, ob die Verbindung erfolgreich war.
Hierzu gibt es die Anweisung connect_error
<?php
// error_reporting(E_ALL);
error_reporting(0);
$db = new mysqli('localhost', 'root', 'root2', 'adressbuch');
print_r ($db->connect_error);
?>

Das bringt uns im Klartext das Problem – für die Abfrage reicht uns die Fehlernummer. Darauf haben wir mit connect_errno
Zugriff. Ist alles Ok, gibt es als Fehlernummer „0“.
Liegt ein Fehler vor, wollen wir dem Nutzer sagen, dass es gerade nicht geht. Also geben wir unserem Programm die entsprechende Ausgabe:
<?php
// error_reporting(E_ALL);
error_reporting(0);
$db = new mysqli('localhost', 'root', 'root', 'adressbuch');
print_r ($db->connect_error);
if ($db->connect_errno) {
die('Sorry - gerade gibt es ein Problem');
}
?>

Klappt alles, dann erhalten wir den Text von index.php, der nach dem Datenbankaufbau kommt.

Wenn Sie einen Fehler finden, bitte mitteilen (egal ob Schreibfehler oder inhaltlicher Fehler).
Mit Maus fehlerhafte Stelle markieren und übernehmen mit folgendem Button: