PHP MySQL Mehrere Zeilen einfügen
Mehrere Datensätze mit MySQLi und PDO in MySQL einfügen
Die Funktion mysqli_multi_query() kann verwendet werden, um mehrere SQL-Anweisungen auszuführen.
Das folgende Beispiel fügt drei neue Datensätze zur Tabelle "MyGuests" hinzu:
Beispiel (MySQLi - objektorientiert)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Verbindung fehlgeschlagen:" . $conn->connect_error);
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', '[email protected]')";
if ($conn->multi_query($sql) === TRUE) {
echo "Neue Datensätze erfolgreich eingefügt";
} else {
echo "Fehler: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
 |
Bitte beachten Sie, dass jede SQL-Anweisung durch ein Semikolon getrennt werden muss. |
Beispiel (MySQLi - prozedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Verbindung fehlgeschlagen:" . mysqli_connect_error());
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', '[email protected]')";
if (mysqli_multi_query($conn, $sql)) {
echo "Neue Datensätze erfolgreich eingefügt";
} else {
echo "Fehler: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
Beispiel (PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]')");
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', '[email protected]')");
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', '[email protected]')");
$conn->commit();
echo "Neue Datensätze erfolgreich eingefügt";
}
catch(PDOException $e)
{
$conn->rollback();
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
Verwendung von vorbereiteten Anweisungen
Die mysqli-Erweiterung bietet eine zweite Möglichkeit zum Einfügen von Anweisungen.
Wir können Anweisungen vorbereiten und Parameter binden.
Die mysql-Erweiterung kann Anweisungen oder Abfragen ohne Daten an die MySQL-Datenbank senden. Sie können Variablen mit Spalten verknüpfen oder an sie "binden".
Beispiel (MySQLi unter Verwendung vorbereiteter Anweisungen)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Verbindung fehlgeschlagen:" . $conn->connect_error);
} else {
$sql = "INSERT INTO MyGuests(firstname, lastname, email) VALUES(?, ?, ?)";
$stmt = mysqli_stmt_init($conn);
if (mysqli_stmt_prepare($stmt, $sql)) {
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
$firstname = 'John';
$lastname = 'Doe';
$email = '[email protected]';
mysqli_stmt_execute($stmt);
$firstname = 'Mary';
$lastname = 'Moe';
$email = '[email protected]';
mysqli_stmt_execute($stmt);
$firstname = 'Julie';
$lastname = 'Dooley';
$email = '[email protected]';
mysqli_stmt_execute($stmt);
}
}
?>
Wir können sehen, dass das obige Beispiel Modularisierung verwendet, um das Problem zu behandeln. Durch das Erstellen von Codeblöcken erreichen wir eine bessere Lesbarkeit und Verwaltung.
Achten Sie auf die Parameterbindung. Schauen wir uns den Code in mysqli_stmt_bind_param() an:
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
Diese Funktion bindet Parameterabfragen und übergibt die Parameter an die Datenbank. Der zweite Parameter ist "sss". Die folgende Liste zeigt die Parametertypen. Das Zeichen 's' teilt MySQL mit, dass der Parameter eine Zeichenkette ist.
Kann einer der folgenden vier Parametertypen sein:
- i - Ganzzahl
- d - Gleitkommazahl mit doppelter Genauigkeit
- s - Zeichenkette
- b - Binär-Blob-Speicherobjekt
Jeder Parameter muss einen angegebenen Typ haben, um die Datensicherheit zu gewährleisten. Durch die Überprüfung des Typs kann das Risiko von SQL-Injection-Schwachstellen reduziert werden.
Weitere Erweiterungen