W3docs

Eine MySQL-Datenbank mit PHP erstellen

Schritt-für-Schritt-Anleitung zum Erstellen einer MySQL-Datenbank mit PHP: Verbindung aufbauen, CREATE DATABASE und CREATE TABLE ausführen.

Eine Datenbank ist der benannte Container, der Ihre Tabellen enthält, und jede Tabelle speichert die Anwendungsdaten in Zeilen und Spalten. Bevor Sie Benutzer, Bestellungen oder Blogbeiträge speichern können, muss dieser Container auf dem MySQL-Server vorhanden sein. Dieses Kapitel führt durch die vollständige Abfolge in PHP: Verbindung zum Server herstellen, eine CREATE DATABASE-Anweisung ausführen und anschließend eine Tabelle darin anlegen.

PHP und ein MySQL- (oder MariaDB-)Server sollten bereits installiert und in Betrieb sein. Wenn der Verbindungsschritt fehlschlägt, lesen Sie PHP Connect to MySQL und PHP MySQLi für Einrichtungsdetails.

Zwei Wege, mit MySQL zu kommunizieren

PHP enthält zwei moderne Erweiterungen für MySQL: MySQLi und PDO. Beide sind sicher und werden unterstützt. Dieses Kapitel verwendet MySQLi, da es MySQL-spezifisch ist und sich einfach lesen lässt – dieselbe CREATE DATABASE-SQL funktioniert jedoch auch über PDO. Verwenden Sie PDO, wenn Sie möglicherweise später die Datenbank-Engine wechseln, und bevorzugen Sie Prepared Statements, wann immer Benutzereingaben eine Abfrage berühren.

Die alten mysql_*-Funktionen wurden in PHP 7 entfernt – verwenden Sie diese nicht.

Schritt 1 — Verbindung zum MySQL-Server herstellen

Um eine Datenbank zu erstellen, verbinden Sie sich mit dem Server, nicht mit einer bestimmten Datenbank (diese existiert noch nicht). Sie übergeben Host, Benutzername und Passwort, aber keinen Datenbanknamen:

<?php
$servername = "localhost";
$username   = "root";
$password   = "";

// Create connection (no database name — we're about to create one)
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>

new mysqli(...) gibt ein Verbindungsobjekt zurück. Wenn etwas schiefgeht, enthält $conn->connect_error die Fehlermeldung, und die() beendet das Skript damit. Benutzername und Passwort oben sind Platzhalter – ersetzen Sie diese durch Ihre eigenen Zugangsdaten.

Die drei folgenden Schritte werden als separate Codeausschnitte zur besseren Übersichtlichkeit gezeigt. In einem echten Projekt würden Sie den Verbindungscode in einer Datei ablegen und ihn mit require oder include einbinden.

Schritt 2 — Die Datenbank erstellen

Mit einer offenen Serververbindung führen Sie eine CREATE DATABASE-Anweisung über $conn->query() aus. Bei einer Anweisung, die keine Zeilen zurückgibt (wie CREATE, INSERT oder UPDATE), gibt query() bei Erfolg TRUE und bei Misserfolg FALSE zurück:

<?php
// SQL to create a database named myDB
$sql = "CREATE DATABASE myDB";

if ($conn->query($sql) === TRUE) {
    echo "Database created successfully";
} else {
    echo "Error creating database: " . $conn->error;
}

$conn->close();
?>

Tipp: Verwenden Sie CREATE DATABASE IF NOT EXISTS myDB, um einen Fehler zu vermeiden, wenn die Datenbank bereits existiert – praktisch bei Setup-Skripten, die möglicherweise mehr als einmal ausgeführt werden.

Schritt 3 — Eine Tabelle in der Datenbank erstellen

Eine Datenbank allein ist leer. Daten befinden sich in Tabellen, die Sie mit CREATE TABLE definieren – ein Tabellenname gefolgt von seinen Spalten und deren Datentypen. Diesmal verbinden Sie sich mit dem Datenbanknamen (das vierte Argument), damit die neue Tabelle am richtigen Ort landet:

<?php
$servername = "localhost";
$username   = "root";
$password   = "";
$dbname     = "myDB";

// Connect, this time selecting the myDB database
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// SQL to create a table
$sql = "CREATE TABLE MyGuests (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    firstname VARCHAR(30) NOT NULL,
    lastname  VARCHAR(30) NOT NULL,
    email     VARCHAR(50),
    reg_date  TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";

if ($conn->query($sql) === TRUE) {
    echo "Table MyGuests created successfully";
} else {
    echo "Error creating table: " . $conn->error;
}

$conn->close();
?>

Was die Spaltendefinitionen bedeuten:

  • id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY — eine eindeutige ganze Zahl, die automatisch für jede Zeile generiert wird. UNSIGNED bedeutet keine negativen Werte; PRIMARY KEY macht es zum Zeilenidentifikator.
  • VARCHAR(30) — Text variabler Länge mit bis zu 30 Zeichen.
  • NOT NULL — die Spalte muss immer einen Wert haben.
  • reg_date TIMESTAMP — wird beim Einfügen auf die aktuelle Zeit gesetzt und bei jeder Aktualisierung erneuert.

Hinweis: Die alte Anzeigebreiten-Syntax INT(6) ist seit MySQL 8.0.17 veraltet und hatte nie Auswirkungen auf Speicher oder Wertebereich, daher wird einfaches INT bevorzugt.

Häufige Fehler und ihre Behebung

  • „Access denied for user" — falscher Benutzername oder falsches Passwort, oder dem Benutzer fehlt das CREATE-Recht. Überprüfen Sie Ihre Zugangsdaten und Berechtigungen.
  • „Can't create database 'myDB'; database exists" — sie ist bereits vorhanden. Löschen Sie sie zuerst, oder verwenden Sie CREATE DATABASE IF NOT EXISTS.
  • $conn->error ist leer, aber die Abfrage ist fehlgeschlagen — stellen Sie sicher, dass Sie mit === TRUE verglichen haben; ein erfolgreicher CREATE-Befehl gibt den boolean true zurück, kein Ergebnis-Set.

Wie es weitergeht

Sobald Ihre Datenbank und Tabellen existieren, sind die nächsten Schritte das Einfügen von Daten und das Auslesen:

Fazit

Das Erstellen einer MySQL-Datenbank in PHP läuft auf drei Schritte hinaus: eine Verbindung zum Server öffnen, CREATE DATABASE ausführen und dann mit dieser Datenbank verbinden und CREATE TABLE ausführen. Das Überprüfen von $conn->connect_error und dem Rückgabewert von query() bei jedem Schritt wandelt stille Fehler in klare Meldungen um – die Gewohnheit, die den Rest Ihrer Datenschicht zuverlässig macht.

Übungen

Übung
Was ist die korrekte Syntax zum Erstellen einer Datenbank in PHP mit MySQLi?
Was ist die korrekte Syntax zum Erstellen einer Datenbank in PHP mit MySQLi?
Was this page helpful?