Bạn có ít nhất hai tùy chọn sau:
$rows = [(1,2,3), (4,5,6), (7,8,9) ... ];
$sql = "insert into `table_name` (col1, col2, col3) values (?,?,?)";
$stmt = $db->prepare($sql);
foreach($rows as $row)
{
$stmt->execute($row);
}
OR:
$rows = [(1,2,3), (4,5,6), (7,8,9) ... ];
$sql = "insert into `table_name` (col1, col2, col3) values ";
$paramArray = array();
$sqlArray = array();
foreach($rows as $row)
{
$sqlArray[] = '(' . implode(',', array_fill(0, count($row), '?')) . ')';
foreach($row as $element)
{
$paramArray[] = $element;
}
}
// $sqlArray will look like: ["(?,?,?)", "(?,?,?)", ... ]
// Your $paramArray will basically be a flattened version of $rows.
$sql .= implode(',', $sqlArray);
$stmt = $db->prepare($sql);
$stmt->execute($paramArray);
Như bạn có thể thấy phiên bản đầu tiên có mã đơn giản hơn rất nhiều; tuy nhiên, phiên bản thứ hai thực hiện chèn hàng loạt. Chèn hàng loạt sẽ nhanh hơn, nhưng tôi đồng ý với @BillKarwin rằng sự khác biệt về hiệu suất sẽ không được nhận thấy trong phần lớn các triển khai.