Erster Eintrag in eine MySQL-Datenbank mit PHP
2 3 4Hier folgt eine Anleitung wie man ein Nachrichten-System mit einer MySQL (die populärste "Open-
Eine Datenbank ist ein System zur elektronischen Datenverwaltung. Die wesentliche Aufgabe einer Datenbank ist es, große Datenmengen effizient und dauerhaft zu speichern. Eine Datenverwaltung besteht meist nicht nur aus Tabellen, sondern auch aus anderen Objekten wie Abfragen, Formularen etc. Der Umgang damit wird im laufe dieser Seiten anhand einfacher Beispiele vermittelt.
Datenbank-Tabellen enthalten Informationen über Personen oder Sachen der gleichen Art. Diese Informationen sind in mehreren Zeilen (Datensätzen) aufgeteilt. Jede Zeile enthält Informationen, die direkt im Zusammenhang mit einer Person oder Sache stehen. Ob Sie nun eine Datenbank-Tabelle über Filme, Rezepte, Personen, Ersatzteile, ein Forum oder Gästebuch etc. erstellen möchten ist relativ egal, die Grundlagen zur Datenverwaltung werden dafür immer benötigt.
![[Bildschirmfoto]
Diese Datenbank-Tabelle soll im laufe der Anleitung erstellt werden. [Bildschirmfoto]
Diese Datenbank-Tabelle soll im laufe der Anleitung erstellt werden.](./scripts/mysql_datenbank/db_tabelle.png)
Der Datenaustausch zwischen dem MySQL-Server geschieht in PHP über HTML-Schnittstellen, das heißt über Formulare, über die neue Daten eingegeben
oder vorhandene Daten abgefragt oder bearbeitet werden.
Um Daten an den MySQL-Server zu senden / zu empfangen werden in dieser Anleitung die „PHP Data Objects” oder kurz PDO verwendet.
PDO stellt eine Abstraktionsebene für den Datenbankzugriff dar und ermöglicht einen einheitlichen Zugang von PHP auf unterschiedliche SQL-basierte
Datenbanken.
➤ Grundvoraussetzung ist, dass mindestens: PHP 7.2 und MySQL (oder MariaDB) auf dem (Linux) Webserver oder lokalem System (Lokaler Webserver) installiert sind. Außerdem brauchen Sie Kenntnisse in PHP um die vorgestellten Scripte den eigenen Wünschen anpassen zu können.
Hier wurde versucht die Anleitung, den PHP-Code und die Anweisungen möglichst einfach zu schreiben.
Es werden nicht alle gezeigten Funktionen bis ins Detail erklärt, manchmal bleiben Fragen auch offen . Für unbekannte Funktionen oder Anweisungen
kann Ihnen eine „bekannte” Suchmaschine Auskunft geben oder schauen Sie beim deutschen
PHP-Manual bzw. beim
MySQL-Referenz-Handbuch nach.
Wenn Sie dabei auch etwas lernen möchten und nicht nur kopieren wollen ,
dann beachten Sie die Kommentare im Quelltext der Scripte.
Mit der Bezeichnung: "Tabelle" ist keine HTML-Tabelle sondern eine Datenbank-Tabelle gemeint.
Inhalt:
- Die Verbindung zur Datenbank herstellen
- Der Aufbau einer Datenbank-Tabelle
- Die Datenbank-Tabelle anlegen
- Die Daten einfügen, auslesen und bearbeiten
- MySQL-Fehlermeldungen anzeigen
- Die Daten über ein Formular sicher eintragen
- Die Daten über ein Formular bearbeiten
- Die Daten sortiert und begrenzt ausgeben
- Hinweise zu den MySQL-Anweisungen
1. Die Verbindung zur Datenbank herstellen
Um auf eine Datenbank zugreifen zu können, müssen Sie zuerst eine Verbindung zum Datenbank-Server herstellen und eine
bereits vorhandene Datenbank auswählen. Die vier Zugangsdaten zur Datenbank bekommen Sie von Ihrem
Webspace-Provider.
Bei den Zugangsdaten handelt es sich um die Host-Adresse dort ist die Datenbank gehostet,
den Datenbanknamen, den Benutzernamen
und das Passwort dieses können Sie meist selbst festlegen.
Da man in den meisten Fällen in mehreren Skripten auf diese Informationen zugreifen muss, empfiehlt sich, die Zugangsdaten inklusive
Verbindung in einer zentralen Datei abzulegen und diese dann bei Bedarf, zum Beispiel mit der PHP-Anweisung:
include "verbinden.php";
einzubinden.
Das hat auch den Vorteil, das bei Änderungen an den Zugangsdaten diese nur an einer Stelle vorgenommen werden müssen.
Quelltext: verbinden.php Ausblenden ❘ Kopieren ❘ Link ❘ Zeilen ❘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// PHP Fehlermeldungen anzeigen
error_reporting(E_ALL);
ini_set('display_errors', true);
// Zugangsdaten zur Datenbank
$DB_HOST = "localhost"; // Host-Adresse
$DB_NAME = "test"; // Datenbankname
$DB_BENUTZER = "root"; // Benutzername
$DB_PASSWORT = ""; // Passwort
/* Zeichenkodierung UTF-8 (utf8mb4) bei der Verbindung setzen,
Infos: https://werner-zenk.de/html/schriftzeichen_richtig_darstellen.php
Und eine PDOException bei einem Fehler auslösen. */
$OPTION = [
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
try {
// Verbindung zur Datenbank aufbauen
$db = new PDO(
"mysql:host=" . $DB_HOST . ";dbname=" . $DB_NAME,
$DB_BENUTZER,
$DB_PASSWORT,
$OPTION
);
} catch (PDOException $e) {
// Bei einer fehlerhaften Verbindung eine Nachricht ausgeben
exit("Verbindung fehlgeschlagen! " . $e->getMessage());
}
Zum Aufbau einer Verbindung zur MySQL-Datenbank benötigt man die Funktion
new PDO(...)
22,
dort hinein gehören dann die Zugangsdaten, um diese einfacher eingeben zu können, wurden diese in PHP-Variablen
($DB_HOST, $DB_NAME, $DB_BENUTZER
und $DB_PASSWORT
)
ausgelagert (Zeile 7 bis 10).
Mit dem try {} catch ()
-Block (Zeile 20 und 28)
wird ein möglicher Fehler beim öffnen der Datenbank abgefangen und gemeldet. Zum Beispiel wenn die Verbindung nicht hergestellt
werden konnte, weil ein Wert falsch eingetragen wurde oder die Datenbank schlicht nicht existiert.
Wurde die Verbindung erfolgreich hergestellt, bekommen Sie mit new PDO()
eine neue
Instanz des "PHP Data Objects", das Sie über $db
ansprechen. Diese Instanz (eine PHP-Variable)
benötigen wir in den weiteren Scripten um die Verbindung herzustellen.
Mit der Variable $OPTION
(Array) 15
werden die Attribute für das Datenbankhandle gesetzt:
• Zeichenkodierung ("UTF-8 / utf8mb4") der Verbindung setzen.
• Außerdem sollen etwaige MySQL-Fehlermeldungen mit PDO::ERRMODE_EXCEPTION
angezeigt werden (ab PHP 8.0 ist das der Standardwert).
➤ Mit einem Lokaler Webserver verbinden
Um auf einem lokalen Webserver eine Verbindung herzustellen, reichen die hier angegebenen Zugangsdaten bereits aus.
Mehr Infos unter » XAMPP - Lokalen Webserver einrichten und verwenden
✔
Die Zugangsdaten verschieben
Speichern Sie Passwörter, Zugangsdaten zur Datenbank außerhalb des Root-Verzeichnisses, da sind diese sicher aufgehoben.
Das Root-Verzeichnis, ist das Verzeichnis in dem die "index.php", "index.htm" -Dateien liegen. Die Zugangsdaten sollten dann
oberhalb dieses Verzeichnisses sein.
2. Der Aufbau einer Datenbank-Tabelle
Bevor wir eine Datenbank-Tabelle anlegen, zeige ich hier den grundlegenden Aufbau einer Tabelle an einem Grafik-Beispiel.
Die Tabelle, in denen die Daten gespeichert sind, werden durch Spalten und Zeilen dargestellt. Eine komplette Zeile einer Datenbank-Tabelle wird als Datensatz betrachtet. Die Anzahl der Spalten ist hier verantwortlich für die Länge des Datensatzes. Ein Datenfeld ist eine bestimmte Spalte aus einem Datensatz.

Anhand der Abbildung kann man erkennen, wie auf ein einzelnes Datenfeld zugegriffen wird.
Ein Datensatz und eine Spalte sind
durch ihre Einmaligkeit gekennzeichnet. Diese einmalige Kennzeichnung erleichtert den Zugriff auf das jeweilige
Datenfeld.
Eine DB-Tabelle hat in der Regel zwischen 1 und 20 Spalten, kann aber auch weit mehr haben. Die Anzahl an Datensätzen ist im Grunde auch nicht beschränkt, eine Tabelle mit 1 Million Datensätzen ist daher eher Standard als Ausnahme.
⚑ Der Entwurf einer Tabelle
- Welchen Zweck soll die Tabelle erfüllen (Gästebuch, Inventarliste, Forum, Lexikon, etc.)?
- Welche Daten sollen erfasst werden (Benutzername, Passwort, Kategorie, Datum, etc.)?
- Namen und Anzahl der Spalten festlegen.
- Überflüssige Spalten vermeiden (z.B. solche die sich aus anderen berechnen lassen).
- Aufbereitung der Spalten in mehreren Tabellen (Normalisierung).
⚑ Die Bezeichnung der Spalten
Überlegen Sie welche Spalten und wie viele in der Tabelle vorhanden sein sollen, jede Spalte bekommt dabei einen Namen, eine einmalige und sinnvolle Bezeichnung. Die einzelnen Spalten müssen eindeutige Namen haben (keine Abkürzungen, durchnummerierte oder kryptische Namen verwenden).
An erster Stelle in unserer „Nachrichten”-Tabelle stehen natürlich der Titel (die Überschrift) der Nachricht, der Autor der die Nachricht verfasst hat und die Nachricht selbst. Um die Nachrichten später leichter auffindbar und sortierbar zu machen benötigen wir noch eine Kategorie.
Damit die eingetragene Nachricht nicht sofort ausgegeben wird, sondern erst bei einem OK vom „Chef” nach der Sichtkontrolle
, fügen wir die Spalte Anzeige hinzu.
Außerdem soll noch festgehalten werden wann die Nachricht geschrieben wurde,
sodass auch das Datum gespeichert werden muss.
Im Hinblick auf die Verwaltung der Daten (anzeigen, bearbeiten etc.) muss auf jeden Fall noch eine Spalte mit einer ID (Identifikationsnummer) hinzugefügt werden, um die Einträge später noch eindeutig identifizieren zu können.
In der Regel sollten die Bezeichnungen der Spalten klein geschrieben werden, Umlaute und Sonderzeichen sind nicht erlaubt, daraus ergeben sich folgende Bezeichnungen: id, titel, autor, nachricht, kategorie, anzeige und datum.
⚑ Die Verwendung von Feldtypen
Mit Hilfe von Feldtypen (Datentypen) kann man Daten einheitlich in den Spalten der Tabelle ablegen. Bei DB-Tabellen spielen diese Feldtypen eine wichtige Rolle, so können Sie in einer Spalte für Integer-Zahlen keinen Text speichern, für jede Spalte in einer Tabelle können Sie einen anderen Feldtyp angeben.
Wichtige Feldtypen sind:
Feldtyp | Beschreibung | |
---|---|---|
Z a h l e n |
INT , INT(x) |
Integer (ganzzahlige Zahlen) mit einem Wert zwischen -2,1 bis 2,1 Mio. |
TINYINT(x) |
Ein sehr kleiner Integer (-128 und 127) mit variabler Länge. | |
FLOAT , FLOAT(x) |
Fließkommazahl - Werte bis: 1.175494351E-38,0. | |
T e x t |
VARCHAR(x) |
Zeichenkette mit variabler Länge von bis zu: 255 Zeichen. |
TEXT , TEXT(x) |
Zeichenkette von bis zu: 65 535 Zeichen. | |
LONGBLOB(x) |
Zeichenkette - von bis zu: 4.294.967.295 Zeichen (z. B.: für Bilder). | |
Z e i t |
DATE |
Datum (Format: YYYY-MM-DD ). |
TIME |
Uhrzeit (Format: HH:MM:SS ). |
|
DATETIME |
Datum und Uhrzeit (Format: YYYY-MM-DD HH:MM:SS ). |
➤
Um die Tabelle möglichst platzsparend anzulegen, muss man sich im klaren sein, welchen Wertebereich (Zeichenlänge) die
zu speichernden Daten haben werden. Um beispielsweise den „Titel” zu speichern, reicht es vollkommen aus,
die Spalte: titel als VARCHAR(80)
zu deklarieren.
Sie sollten in allen Fällen den geeignetsten Feldtyp auswählen und dessen Länge angeben.
In unserer „Nachrichten”-Tabelle verwenden wir folgende Spalten und Feldtypen:
- id - Feldtyp:
INT
- Primärschlüssel (Eine eindeutige Identifikationsnummer). - titel - Feldtyp:
VARCHAR(80)
mit einer Länge von 80 Zeichen. - autor - Feldtyp:
VARCHAR(30)
mit einer Länge von 30 Zeichen. - nachricht - Feldtyp:
TEXT
(ohne Angabe der Speichergröße, dann werden 65 535 Zeichen reserviert). - kategorie - Feldtyp:
VARCHAR(25)
mit einer Länge von 25 Zeichen. - anzeige - Feldtyp:
TINYINT(1)
mit einer Länge von einem Zeichen (Ziffer!). - datum - Feldtyp:
DATE
(Format: YYYY-MM-DD).
3. Die Datenbank-Tabelle anlegen
Damit Sie eine Datenbank-Tabelle anlegen können, benötigen Sie MySQL-Anweisungen.
Diese werden von PHP an MySQL zum Beispiel mit:
$db->exec("Anweisungen")
übermittelt. Die Anweisungen haben eine bestimmte Syntax (Schreibweise)
die genau befolgt werden muss, aber keine Angst das ist nicht besonders schwer
denn wir gehen hier Schritt für Schritt die einzelnen Anweisungen durch.
MySQL-Anweisungen sind, genau wie PHP-Anweisungen auch, im Klartext programmiert. Das heißt, wer ein wenig englisch versteht, kann meist schon aus der Anweisung selbst ihre Bedeutung ablesen. Anders als in PHP sind MySQL-Anweisungen nicht als Funktionen konzipiert, sondern werden einfach wie ein Satz aneinander gereiht. MySQL-Anweisungen sind recht einfach zu lernen, zumindest die Grundzüge.
Hier also das Script mit der die Datenbank-Tabelle `nachrichten` angelegt wird.
Zuerst binden wir mit der include()
-Funktion unsere Verbindung zur Datenbank ein. Mit der Variable:
$db rufen wir die PDO-Instanz zur Datenbank auf und mit
exec("CREATE TABLE …")
werden die Anweisungen übermittelt die für das Anlegen der Tabelle benötigt werden.
Das ganze ist in einem try {} catch ()
-Block gefasst den wir weiter oben bereits kennen gelernt haben.
Quelltext: anlegen.php Ausblenden ❘ Kopieren ❘ Link ❘ Zeilen ❘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// Verbindung zur Datenbank aufbauen.
include "verbinden.php";
try {
// Anlegen der Datenbank-Tabelle.
$db->exec("CREATE TABLE IF NOT EXISTS `nachrichten` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`titel` VARCHAR(80) NOT NULL,
`autor` VARCHAR(30) NOT NULL DEFAULT 'Werner',
`nachricht` TEXT NOT NULL,
`kategorie` VARCHAR(25) NOT NULL,
`anzeige` TINYINT(1) NOT NULL,
`datum` DATE NOT NULL
) ENGINE = MYISAM DEFAULT CHARSET=utf8");
echo '<p>▷ Die Datenbank-Tabelle wurde angelegt.<br>
<a href="eintragen.php">Erste Nachricht eintragen</a></p>';
}
catch (PDOException $e) {
// Bei einem Fehler eine Nachricht ausgeben.
exit('<p>▷ Fehler beim anlegen der Datenbank-Tabelle!</p>' .
$e->getMessage());
}
?>
Die MySQL-Anweisungen kurz erklärt
Mit CREATE TABLE
wird eine neue Tabelle mit dem Namen
`nachrichten` angelegt.
Dieser Name wird auch in weiteren MySQL-Anweisungen benötigt um Zugriff auf die Tabelle zu erhalten.
IF NOT EXISTS
Die Tabelle wird nur angelegt, wenn eine Tabelle mit gleichem Namen nicht bereits vorhanden ist
(das ist eine optionale Angabe).
AUTO_INCREMENT
Für jede Tabelle kann genau eine Integer-Spalte mit diesem Zusatz
versehen werden.
Wird in diese Tabelle ein neuer Datensatz eingefügt, so erhält er automatisch in diesem Feld (id)
die nächste noch freie Nummer.
PRIMARY KEY
Damit wird der Spalte id der
Primärschlüssel zugewiesen (ein einmaliger Schlüssel, der jeden Datensatz einer Tabelle eindeutig
identifiziert).
NOT NULL
Verhindert, dass eine Spalte einen Nullwert erhält, sondern einen leeren String (Zeichenkette).
DEFAULT 'Werner'
fügt einen Vorgabewert (hier 'Werner') in die
Spalte ein (Optionale Angabe). Vorgabewerte sind notwendig, wenn bei einem INSERT nicht alle Spalten gefüllt werden.
ENGINE = MYISAM
ENGINE (engl. für Maschine) MYISAM
(engl. Abkürzung von: My Indexed Sequential Access Method) ist der
Standard-Tabellentyp.
MYISAM
eignet für kleine Datenbanken oder Anwendungen wo viel und oft Daten geändert werden. Hier ist MYISAM
deutlich performanter, weil INSERT und UPDATE schneller sind. Und natürlich wenn man Texte durchsuchen möchte (Volltextsuche).
An dieser Stelle möchte ich noch erwähnen das es noch andere Tabellentypen gibt wie zum Beispiel: InnoDB
.
Eine SELECT-Anfrage wird dort schneller ausgeführt dafür sind INSERT und UPDATE langsamer.
DEFAULT CHARSET
Hier wird der Zeichensatz (utf8) der Tabelle gesetzt.
⚑ Das Anlegen der Datenbank-Tabelle starten
Jetzt wird es spannend, aber nur ein wenig
Die Datei: anlegen.php braucht nur ein Mal ausgeführt werden,
Datei über dem Browser aufrufen um die DB-Tabelle anzulegen.
✔
Wurde die Tabelle erfolgreich angelegt, erscheint die Meldung:
Die Datenbank-Tabelle wurde angelegt.
✘
Sollte ein Fehler aufgetreten sein, erscheint hingegen die Meldung:
Fehler beim anlegen der Datenbank-Tabelle.
und eine MySQL-Fehlermeldung wird ausgegeben.
Mögliche Ursachen sind zum Beispiel eine fehlerhafte Verbindung zur Datenbank oder Fehler in den MySQL-Anweisungen.
Die Tabelle sieht nun wie folgt aus, da diese gerade erst angelegt wurde existieren entsprechend auch noch keine Daten darin.
id | titel | autor | nachricht | kategorie | anzeige | datum |
---|---|---|---|---|---|---|