Групповые параметризованные вставки

Я пытаюсь переключить некоторые жестко запрограммированные запросы на использование параметризованных входных данных, но столкнулся с проблемой: как вы форматируете входные данные для параметризованных массовых вставок?

В настоящее время код выглядит следующим образом:

$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);

Возможное решение (изменено из Как вставить массив в один подготовленный MySQL оператор с PHP и PDO ) выглядит следующим образом:

$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);
}

Есть ли лучший способ выполнить массовую вставку с параметризованными запросами?

10
задан Community 23 May 2017 в 10:24
поделиться