Daten einfügen per INSERT
Dieses Tutorial beschäftigt sich mit verschiedenen Wegen um neue Datensätze einer Tabelle hinzuzufügen.
Inhaltsverzeichnis
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 (?, ?, ?)"); ?> |
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['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 (?, ?, ?)"); $neue_id = $pdo->lastInsertId(); echo "Neuer Nutzer mit id $neue_id angelegt"; ?> |