1

機能する1つのクエリに複数の行を挿入するこのコードがあります。

私がやりたいことは、colAがデータベース更新colBにすでに存在する場合です。

INSERT ON DUPLICATE KEY UPDATE の使用を見てきましたが、一度に 1 行しか機能していないことがわかります。

コードで 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))";
4

1 に答える 1