Đẩy dữ liệu từ mảng vào database
Mảng thì to mà thân em MySQL thì nhỏ!
MySQL cho phép chèn nhiều records qua một câu lệnh kiểu như sau
# Câu lệnh insert multiple:
INSERT INTO bảng VALUES (bộ giá trị thứ nhất), (bộ giá trị thứ hai), … (bộ giá trị thứ N);
Vì thế khi đẩy dữ liệu từ mảng vào database ta có thể tạo ra câu lệnh SQL như vậy, thay vì với mỗi phần tử của mảng ta lại tạo ra một bộ và INSERT INTO bảng VALUES (bộ giá trị có được);
Tuy nhiên do cấu hình max_allowed_packet, ta chỉ thực thi được câu lệnh chèn đồng thời 1 phát nhiều bản ghi với chỉ số N giới hạn.
Do đó, code phân tách mảng và generate ra các câu SQL nên làm như sau
<?php
$prefixSQL = 'INSERT INTO phimconheo(id, title, description, source, price, available) VALUES ';
$i = 0;
foreach ($data as $record) {
$id = intval($record['id']);
$title = addslashes($record['title']);
// same above for other fields
$sql .= "($id, $title, $description, $source, $price, $available),";
$i++;
if ($i == LIMIT_EXECUTABLE) {
$sql = substr($sql, 0, strlen($sql) – 1) . ";";
$sql = $prefixSQL . $sql;
echo $sql . "\n";
$i = 0;
$sql = '';
}
}
if ($sql != '') {
$sql = substr($sql, 0, strlen($sql) – 1) . ";";
$sql = $prefixSQL . $sql;
echo $sql . "\n";
}