我有這個代碼插入多個行中的一個查詢工作。PHP PDO插入批量記錄或更新(如果存在)
我希望做的不是如果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)";
EDIT2:
我加了這個,但我沒有得到任何行插入(空表)
$sql .= " ON DUPLICATE KEY UPDATE colA = VALUES(colA),
colB = VALUES(colB),
colC = VALUES(colC),
colD = VALUES(colD),
colE = VALUES(colE))";
'對重複KEY UPDATE'應能正常工作了多行,因爲你可以用'VALUES(列名)'來獲取值該嘗試插入的列的列。 – Barmar
-1爲無意義的文檔 –
@您的常識。關於如何讓這個工作而不是僅僅因爲我不理解文檔而得到這個工作的建議將更多地被讚賞 – AdRock