Próbuję zmienić niektóre zakodowane zapytania w celu użycia sparametryzowanych danych wejściowych, ale napotkam problem: Jak sformatować dane wejściowe dla sparametryzowanych insertów zbiorczych?Wielkoformatowe wkładki sparametryzowane
Obecnie kod wygląda następująco:
$data_insert = "INSERT INTO my_table (field1, field2, field3) ";
$multiple_inserts = false;
while ($my_condition)
{
if ($multiple_inserts)
{
$data_insert .= " UNION ALL ";
}
$data_insert .= " SELECT myvalue1, myvalue2, myvalue3 ";
}
$recordset = sqlsrv_query($my_connection, $data_insert);
Potencjalnym rozwiązaniem (modyfikowany How to insert an array into a single MySQL Prepared statement w/ PHP and PDO) wydaje się być:
$sql = 'INSERT INTO my_table (field1, field2, field3) VALUES ';
$parameters = array();
$data = array();
while ($my_condition)
{
$parameters[] = '(?, ?, ?)';
$data[] = value1;
$data[] = value2;
$data[] = value3;
}
if (!empty($parameters))
{
$sql .= implode(', ', $parameters);
$stmt = sqlsrv_prepare($my_connection, $sql, $data);
sqlsrv_execute($stmt);
}
Czy istnieje lepszy sposób, aby osiągnąć zbiorczego wkładkę parametryzowane zapytania?
Potencjalnym rozwiązaniem, specyficzne dla sporządzanych sprawozdań , jest "jedno przygotowanie, wielokrotne wykonywanie" –
Próbowałem uniknąć tego, aby ograniczyć potrzebę obsługi transakcji. Jeśli którakolwiek z wstawek się nie powiedzie, cała operacja powinna zakończyć się niepowodzeniem. –
jaka transakcja? –