PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

Daten einfügen per INSERT

20. April 2018
  1. Home
  2. »
  3. MySQL Tutorial
  4. »
  5. Daten einfügen per INSERT

Dieses Tutorial beschäftigt sich mit verschiedenen Wegen um neue Datensätze einer Tabelle hinzuzufügen.

Inhaltsverzeichnis

  • 1 Daten einfügen mittels prepared Statements
  • 2 Benannte Parameter
  • 3 Mehrere Zeilen eintragen
  • 4 Auto Increment Wert abrufen

Daten einfügen mittels prepared Statements

Mittels der INSERT-Anweisung können wir aus unserem PHP-Script heraus Daten zu einer Tabelle hinzufügen. Erneut verwenden wir prepared statements um unsere Daten in die Datenbank zu schreiben:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("INSERT INTO tabelle (spalte1, spalte2, splate3) VALUES (?, ?, ?)");
$statement->execute(array('wert1', 'wert2', 'wert3'));  
?>

Beim INSERT-Befehl geben wir zuerst den Namen der Tabelle und die Namen der Spalten an, die wir befüllen möchte. Darauf folgen die Werte. Das erste ? ist ein Platzhalter für den Wert der spalte1, das zweite ? für die zweite Spalte usw. Mittels $statement->execute() führen wir das SQL-Statement aus. Dabei übergeben wir die drei Werte für die drei Platzhalter. In diesem Fall haben wir also einen neuen Datensatz mit den Werten wert1, wert2, wert3 erzeugt.

Für unser Beispiel mit der users-Tabelle könnte der Befehl wie folgt aussehen:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("INSERT INTO users (email, vorname, nachname) VALUES (?, ?, ?)");
$statement->execute(array('[email protected]', 'Klaus', 'Neumann'));  
?>

Hier wird ein neuer Benutzer in der user-Tabelle angelegt mit den entsprechenden Informationen. Die übrigen Felder, wie beispielsweise die id werden von MySQL automatisch befüllt. Im Fall der id mit einer fortlaufend aufsteigenden Nummer (da wir bei der Erzeugung der Tabelle die Eigenschaft auto_increment) gesetzt haben. Alle anderen Felder werden mit den Standardwerten gesetzt.

Benannte Parameter

For prepared Statements haben wir die Möglichkeit die Platzhalter entweder anonym per ? zu definieren, oder diese zu benennen. Das obige Beispiel mit benannten Parametern würde wie folgt aussehen:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("INSERT INTO users (email, vorname, nachname) VALUES (:email, :vorname, :nachname)");
$statement->execute(array('email' => '[email protected]', 'vorname' => 'Klaus', 'nachname' => 'Neumann'));  
?>

Hier haben wir die zu befüllenden Parameter mit den Namen :email, :vorname und :nachname benannt. Rufen wir nun $statement->execute() auf, so muss das assoziative Array entsprechende Einträge für diese drei Parameter beinhalten. Weitere Parameter werden ignoriert. Wie und wo ihr das Array übergebt, ist egal:

1
2
3
4
5
6
7
8
9
10
11
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$neuer_user = array();
$neuer_user['email'] = '[email protected]';
$neuer_user['vorname'] = 'Klaus';
$neuer_user['nachname'] = 'Neumann';
$neuer_user['weiteres_feld'] = 'Dieses wird beim Eintragen ignoriert';
 
$statement = $pdo->prepare("INSERT INTO users (email, vorname, nachname) VALUES (:email, :vorname, :nachname)");
$statement->execute($neuer_user);  
?>

Mehrere Zeilen eintragen

Mit prepared Statements ist es einfach mehrere neue Zeilen einzutragen. Dazu müsst ihr einfach immer nur erneut $statement->execute($data) aufrufen. Im folgenden Beispiel legen wir die Nutzer Vorname0 bis Vorname9 an:

1
2
3
4
5
6
7
8
9
10
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("INSERT INTO users (email, vorname, nachname) VALUES (:email, :vorname, :nachname)");
 
for($i=0;$i<10; $i++) {
   $neuer_user = array('email' => 'email'.$i, 'vorname' => 'Vorname'.$i, 'nachname' => 'Nachname'.$i)
   $statement->execute($neuer_user);  
}
?>

In dem obigen Beispiel bereiten wir unser Statement zum Eintragen in die Tabelle vor. Danach folgt eine for-Schleife, die bis 10 zählt. In jedem Schleifendurchlauf wird das Array $neuer_user neu mit Werten befüllt und mittels $statement->execute($neuer_user) wird das INSERT-Statement ausgeführt.

Auto Increment Wert abrufen

Es empfiehlt sich in fast allen Tabellen eine Spalte id zu besitzen, die die Auto Increment-Eigenschaft besitzt. Diese ID dient zur eindeutigen Identifizierung unserer Datensätze. Mittel Auto Increment erhalten wir für die Spalte eine fortlaufende Nummerierung, d.h. der erste Eintrag bekommt die ID 1, der zweite Eintrag die ID 2 usw.

Fügen wir nun einen neuen Eintrag in eine Tabelle und möchten die ID erhalten, die dieser neue Eintrag bekommen hat, so geht dies mittel $pdo->lastInsertId();. Dies gibt uns die zuletzt vergebene ID zurück.

1
2
3
4
5
6
7
8
9
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("INSERT INTO users (email, vorname, nachname) VALUES (?, ?, ?)");
$statement->execute(array('[email protected]', 'Klaus', 'Neumann'));  
 
$neue_id = $pdo->lastInsertId();
echo "Neuer Nutzer mit id $neue_id angelegt";
?>

Autor: Nils Reimers
Zurück: Prepared Statements
Weiter: Daten aktualisieren per UPDATE

MySQL Tutorial

  • MySQL installieren und starten
  • phpMyAdmin
  • Verbindung aufbauen
  • Simple Datenabfrage
  • Komplexere Datenabfrage
  • Prepared Statements
  • Daten einfügen
  • Daten aktualisieren
  • Daten löschen
  • Gefundene Einträge zählen
  • DATE-Datenbankspalten
  • Datum- und Zeitfunktionen
  • MySQL Fehlermeldungen
  • Datenbankverbindung schließen
  • JOIN
  • Indizes
  • Normalformen
  • Fremdschlüssel
  • Übersicht SQL-Befehle
  • Crashkurs MySQL
  • Crashkurs MySQLi
  • Crashkurs PDO
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur

Hoster – Geringste Ausfallzeit

  1. webgo Ø 0 Min.
  2. netcup Ø 0 Min.
  3. Linevast Ø 3 Min.
  4. All-Inkl.com Ø 3 Min.
  5. checkdomain Ø 5 Min.
  6. dogado Ø 6 Min.
  7. Strato Ø 8 Min.
  8. manitu Ø 9 Min.
  9. 1&1 Ø 10 Min.
  10. DomainFactory Ø 13 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2025

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}