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";
$conn = new mysqli($servername, $username, $password, $dbname);
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();
?>
 |
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";
$conn = mysqli_connect($servername, $username, $password, $dbname);
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);
$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 "Nuevo registro insertado correctamente";
}
catch(PDOException $e)
{
$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";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Error de conexión:" . $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);
}
}
?>
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