sql >> Base de Datos >  >> RDS >> Mysql

PDO MySQL:inserte varias filas en una consulta

Una manera fácil de evitar las complicaciones sería algo como esto

$stmt = $pdo->prepare('INSERT INTO foo VALUES(:a, :b, :c)');
foreach($data as $item)
{
    $stmt->bindValue(':a', $item[0]);
    $stmt->bindValue(':b', $item[1]);
    $stmt->bindValue(':c', $item[2]);
    $stmt->execute();
}

Sin embargo, esto ejecuta la instrucción varias veces. Por lo tanto, es mejor si creamos una sola consulta larga para hacer esto.

Este es un ejemplo de cómo podemos hacer esto.

$query = "INSERT INTO foo (key1, key2) VALUES "; //Prequery
$qPart = array_fill(0, count($data), "(?, ?)");
$query .=  implode(",",$qPart);
$stmt = $dbh -> prepare($query); 
$i = 1;
foreach($data as $item) { //bind the values one by one
   $stmt->bindValue($i++, $item['key1']);
   $stmt->bindValue($i++, $item['key2']);
}
$stmt -> execute(); //execute