У меня есть этот код, который вставляет несколько строк в один запрос, который работает.
Я бы хотел, чтобы это было не так, если colA уже существует в обновлении базы данных colB.
Я рассмотрел использование INSERT ON DUPLICATE KEY UPDATE, но я вижу, что он работает только для одной строки за раз, когда у меня может быть 1000 строк.
Как я могу использовать INSERT/UPDATE в своем коде?
$sql = 'INSERT INTO table (colA, colB, colC, colD, colE) VALUES';
$insertQuery = array();
$insertData = array();
$n = 0;
// and loop through the array binding values from each row
// to the placeholders before execution
// placeholders names increment starting at 0 to array length
foreach ($rows as $row) {
$insertQuery[] = '(
:colA' . $n . ',
:colB' . $n . ',
:colC' . $n . ',
:colD' . $n . ',
:colE' . $n . '
)';
$insertData['colA' . $n] = $row['colA'];
$insertData['colB' . $n] = $row['colB'];
$insertData['colC' . $n] = $row['colC'];
$insertData['colD' . $n] = $row['colD'];
$insertData['colE' . $n] = $row['load_note'];
$insertData['last_updated' . $n] = $row['colE'];
$n++;
}
// prepare the query and exeute it
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery);
$stmt = $db->prepare($sql);
$stmt->execute($insertData);
}
РЕДАКТИРОВАТЬ:
Как обновить несколько столбцов? Это верно?
$sql .= " ON DUPLICATE KEY UPDATE status = VALUES(colB, colC)";
РЕДАКТИРОВАТЬ2:
Я добавил это, но не вставляю строки (пустая таблица)
$sql .= " ON DUPLICATE KEY UPDATE colA = VALUES(colA),
colB = VALUES(colB),
colC = VALUES(colC),
colD = VALUES(colD),
colE = VALUES(colE))";
ON DUPLICATE KEY UPDATE
должен правильно работать для нескольких строк, поскольку вы можете использоватьVALUES(columnName)
для получения значения столбца из этой попытки вставки. - person Barmar   schedule 22.10.2013