Eine MySQL-Tabelle mit PHP erstellen
MySQL-Tabelle mit PHP erstellen: mysqli und PDO, CREATE TABLE-Syntax, Spaltendatentypen, Primärschlüssel und häufige Fehler.
Eine Tabelle ist der Ort, an dem MySQL Ihre Datenzeilen tatsächlich speichert. Bevor Sie Benutzer, Produkte oder Beiträge einfügen können, muss die entsprechende Tabelle mit einer definierten Menge an Spalten und dem Datentyp jeder Spalte vorhanden sein. Diese Seite zeigt, wie Sie eine MySQL-Tabelle aus PHP heraus mit den Erweiterungen mysqli und PDO erstellen, erklärt die CREATE TABLE-Syntax Schritt für Schritt und behandelt die häufigsten Fehler.
Wenn Sie die Datenbank, in der die Tabelle gespeichert werden soll, noch nicht erstellt haben, tun Sie das zuerst — siehe Eine MySQL-Datenbank erstellen. Einen tieferen Einblick in die Verbindung selbst finden Sie unter Mit PHP eine Verbindung zu MySQL herstellen.
Wie das Erstellen einer Tabelle funktioniert
Aus PHP heraus besteht das Erstellen einer Tabelle immer aus drei Schritten:
- Verbinden Sie sich mit dem MySQL-Server und wählen Sie eine Datenbank aus. Eine Tabelle muss zu einer Datenbank gehören, daher muss die Verbindung wissen, welche verwendet werden soll.
- Erstellen Sie die SQL-Anweisung
CREATE TABLEals Zeichenkette. Dies ist einfaches SQL — PHP übermittelt sie lediglich an den Server. - Führen Sie die Anweisung mit
mysqli_query()(mysqli) oder$pdo->exec()(PDO) aus und prüfen Sie, ob sie erfolgreich war.
Der häufigste Anfängerfehler ist das Verbinden ohne Angabe einer Datenbank. CREATE TABLE schlägt dann mit „No database selected" fehl, weil der Server keinen Ort für die Tabelle hat. Die folgenden Beispiele übergeben immer den Datenbanknamen, sodass dies nicht passieren kann.
Verbinden und eine Datenbank auswählen
mysqli_connect() nimmt den Servernamen, den Benutzernamen und das Passwort entgegen — und, was wichtig ist, ein optionales viertes Argument: den Datenbanknamen. Übergeben Sie ihn, damit die neue Tabelle einen Speicherort hat.
<?php
$server = "localhost";
$username = "username";
$password = "password";
$database = "my_app"; // the database the table will be created in
$conn = mysqli_connect($server, $username, $password, $database);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>Wenn Sie die Datenbank im selben Skript erstellen, rufen Sie mysqli_select_db($conn, "my_app") nach dem Erstellen auf, oder stellen Sie erneut eine Verbindung mit dem Datenbanknamen als viertem Argument her, bevor Sie CREATE TABLE ausführen.
Eine Tabelle mit mysqli erstellen
Sobald die Verbindung eine ausgewählte Datenbank hat, führen Sie die CREATE TABLE-Anweisung mit mysqli_query() aus. Bei Erfolg gibt sie true zurück, bei Fehler false — prüfen Sie daher immer das Ergebnis und geben Sie mysqli_error() bei einem Fehler aus — diese Meldung zeigt Ihnen genau, was schiefgelaufen ist.
Im Folgenden wird eine users-Tabelle mit drei Spalten erstellt: id, name und email.
<?php
$sql = "CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
)";
if (mysqli_query($conn, $sql)) {
echo "Table created successfully";
} else {
echo "Error creating table: " . mysqli_error($conn);
}
?>Was jeder Teil der Anweisung bedeutet
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY— eine Ganzzahl, die nie negativ sein kann (UNSIGNED), sich für jede neue Zeile automatisch um eins erhöht (AUTO_INCREMENT) und jede Zeile eindeutig identifiziert (PRIMARY KEY). Fast jede Tabelle hat eine solche Spalte.name VARCHAR(30) NOT NULL— eine Zeichenkette variabler Länge mit bis zu 30 Zeichen.NOT NULLbedeutet, dass ein Wert erforderlich ist; ein Einfügen ohne Namen wird abgelehnt.email VARCHAR(50) NOT NULL UNIQUE— eine erforderliche Zeichenkette mit einerUNIQUE-Einschränkung, sodass MySQL es ablehnt, zwei Zeilen mit derselben E-Mail-Adresse zu speichern.
Häufige Spaltendatentypen
| Typ | Verwendung | Beispiel |
|---|---|---|
INT | Ganze Zahlen, IDs, Zähler | views INT |
VARCHAR(n) | Kurzer Text bis zu n Zeichen | name VARCHAR(50) |
TEXT | Langer Text (Artikel, Kommentare) | body TEXT |
DECIMAL(p,s) | Exakte Dezimalzahlen wie Preise | price DECIMAL(8,2) |
DATE / DATETIME | Datum und Zeitstempel | created_at DATETIME |
BOOLEAN | Wahr/Falsch-Flags | active BOOLEAN |
Eine Tabelle mit PDO erstellen
PDO ist die modernere, portablere API und wird für neue Projekte bevorzugt. Das SQL ist identisch — nur der PHP-Wrapper ändert sich. Mit PDO im Exception-Modus verpacken Sie den Aufruf in einen try/catch-Block anstatt einen Rückgabewert zu prüfen.
<?php
$dsn = "mysql:host=localhost;dbname=my_app";
try {
$pdo = new PDO($dsn, "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
)";
$pdo->exec($sql);
echo "Table created successfully";
} catch (PDOException $e) {
echo "Error creating table: " . $e->getMessage();
}
?>Den Fehler „Tabelle existiert bereits" vermeiden
Wenn Sie eine CREATE TABLE-Anweisung zweimal ausführen, schlägt der zweite Durchlauf mit „Table 'users' already exists" fehl. Fügen Sie IF NOT EXISTS hinzu, um die Anweisung sicher wiederholbar zu machen — MySQL überspringt die Erstellung einfach, wenn die Tabelle bereits vorhanden ist.
<?php
$sql = "CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
)";
mysqli_query($conn, $sql);
?>Häufige Fehler und Lösungen
- „No database selected" — Sie haben sich ohne eine Datenbank verbunden. Übergeben Sie sie als viertes Argument an
mysqli_connect()oder verwenden Siemysqli_select_db(). - „Table 'users' already exists" — verwenden Sie
CREATE TABLE IF NOT EXISTS, oder löschen Sie die alte Tabelle zuerst. - „You have an error in your SQL syntax" — meist ein überflüssiges Komma nach der letzten Spalte, oder ein reserviertes Wort wie
orderals Spaltenname ohne Backticks. Schließen Sie solche Namen in Backticks ein:`order`. - „Access denied for user" — das MySQL-Konto verfügt nicht über
CREATE-Rechte für diese Datenbank.
Nächste Schritte
Jetzt, da die Tabelle vorhanden ist, können Sie mit den darin enthaltenen Daten arbeiten:
- Daten in eine MySQL-Tabelle einfügen
- Daten aus einer MySQL-Tabelle auswählen
- Vorbereitete Anweisungen verwenden, um Benutzereingaben sicher einzufügen
- Die mysqli-Erweiterung im Überblick
Zusammenfassung
Das Erstellen einer Tabelle aus PHP läuft darauf hinaus, eine Verbindung mit einer ausgewählten Datenbank herzustellen, eine CREATE TABLE-Anweisung zu schreiben, die jede Spalte und ihren Typ definiert, und sie mit mysqli_query() oder PDO::exec() auszuführen. Prüfen Sie immer auf Fehler, fügen Sie IF NOT EXISTS für Skripte hinzu, die Sie möglicherweise erneut ausführen, und wählen Sie für jede Spalte einen sinnvollen Datentyp, damit MySQL Ihre Daten effizient und sicher speichert.