PHP MySQL Insertar múltiples datos


Insertar múltiples datos en MySQL usando MySQLi y PDO

La función mysqli_multi_query() se puede usar para ejecutar múltiples sentencias SQL.

El siguiente ejemplo agrega tres nuevos registros a la tabla "MyGuests":

Ejemplo (MySQLi - Orientado a objetos)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //Crear conexión $conn = new mysqli($servername, $username, $password, $dbname); //Verificar conexión if ($conn->connect_error) { die("Error de conexión:" . $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 "Nuevo registro insertado correctamente"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close(); ?>


Note Ten en cuenta que cada sentencia SQL debe estar separada por un punto y coma.

Ejemplo (MySQLi - Procedural)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //Crear conexión $conn = mysqli_connect($servername, $username, $password, $dbname); //Verificar conexión if (!$conn) { die("Error de conexión:" . 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 "Nuevo registro insertado correctamente"; } else { echo "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); ?>


Ejemplo (PDO)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDBPDO"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Iniciar transacción $conn->beginTransaction(); //Sentencia SQL $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]')"); //Confirmar transacción $conn->commit(); echo "Nuevo registro insertado correctamente"; } catch(PDOException $e) { //Si falla la ejecución, revertir $conn->rollback(); echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>



Usar sentencias preparadas

La extensión mysqli proporciona una segunda forma para las sentencias de inserción.

Podemos preparar sentencias y enlazar parámetros.

La extensión mysql puede enviar sentencias o consultas a la base de datos mysql sin incluir datos. Puedes asociar o "vincular" variables a las columnas.

Ejemplo (MySQLi usando sentencias preparadas)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //Crear conexión $conn = new mysqli($servername, $username, $password, $dbname); //Comprobar conexión if ($conn->connect_error) { die("Error de conexión:" . $conn->connect_error); } else { $sql = "INSERT INTO MyGuests(firstname, lastname, email) VALUES(?, ?, ?)"; //Inicializar el objeto statement para mysqli_stmt_prepare() $stmt = mysqli_stmt_init($conn); //Sentencia preparada if (mysqli_stmt_prepare($stmt, $sql)) { //Vincular parámetros mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email); //Establecer parámetros y ejecutar $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); } } ?>

Podemos ver que el ejemplo anterior utiliza la modularización para manejar el problema. Podemos lograr una lectura y gestión más sencillas mediante la creación de bloques de código.

Observa la vinculación de parámetros. Veamos el código en mysqli_stmt_bind_param():

mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);

Esta función vincula los parámetros de la consulta y los pasa a la base de datos. El segundo parámetro es "sss". La siguiente lista muestra los tipos de parámetros. El carácter s le dice a mysql que el parámetro es una cadena.

Puede ser uno de los siguientes cuatro tipos de parámetros:

  • i - entero
  • d - número de punto flotante de doble precisión
  • s - cadena
  • b - objeto de almacenamiento blob binario

Cada parámetro debe especificar un tipo para garantizar la seguridad de los datos. La verificación del tipo puede reducir el riesgo de vulnerabilidades de inyección SQL.

Otras extensiones