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"; //Verbindung herstellen $conn = new mysqli($servername, $username, $password, $dbname); //Verbindung prüfen 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(); ?>


Note 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"; //Verbindung herstellen $conn = mysqli_connect($servername, $username, $password, $dbname); //Verbindung prüfen 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); // den PDO-Fehlermodus auf Exception setzen $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Transaktion beginnen $conn->beginTransaction(); //SQL-Anweisung $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]')"); //Transaktion festschreiben $conn->commit(); echo "Neue Datensätze erfolgreich eingefügt"; } catch(PDOException $e) { //Rollback, wenn die Ausführung fehlschlägt $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"; //Verbindung herstellen $conn = new mysqli($servername, $username, $password, $dbname); //Verbindung prüfen if ($conn->connect_error) { die("Verbindung fehlgeschlagen:" . $conn->connect_error); } else { $sql = "INSERT INTO MyGuests(firstname, lastname, email) VALUES(?, ?, ?)"; //Initialisieren Sie ein Statement-Objekt für mysqli_stmt_prepare() $stmt = mysqli_stmt_init($conn); //Vorbereitete Anweisung if (mysqli_stmt_prepare($stmt, $sql)) { //Parameter binden mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email); //Parameter setzen und ausführen $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