Lắp ráp một INSERT
câu lệnh có nhiều hàng trong MySQL nhanh hơn nhiều so với một INSERT
câu lệnh trên mỗi hàng.
Điều đó nói rằng, có vẻ như bạn có thể đang gặp phải các vấn đề về xử lý chuỗi trong PHP, đây thực sự là một vấn đề thuật toán, không phải là một vấn đề ngôn ngữ. Về cơ bản, khi làm việc với các chuỗi lớn, bạn muốn giảm thiểu việc sao chép không cần thiết. Về cơ bản, điều này có nghĩa là bạn muốn tránh ghép nối. Cách nhanh nhất và hiệu quả nhất về bộ nhớ để tạo một chuỗi lớn, chẳng hạn như để chèn hàng trăm hàng cùng một lúc, là tận dụng implode()
hàm và gán mảng.
$sql = array();
foreach( $data as $row ) {
$sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')';
}
mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql));
Ưu điểm của cách tiếp cận này là bạn không sao chép và sao chép lại câu lệnh SQL mà bạn đã lắp ráp cho đến nay với mỗi phép nối; thay vào đó, PHP thực hiện điều này một lần trong implode()
tuyên bố. Đây là một lớn chiến thắng.
Nếu bạn có nhiều cột để ghép lại với nhau và một hoặc nhiều cột rất dài, bạn cũng có thể tạo một vòng lặp bên trong để làm điều tương tự và sử dụng implode()
để gán mệnh đề giá trị cho mảng bên ngoài.