Tôi nhận được một dãy gồm 650 hàng. Chèn này bằng cách sử dụng PDO mất từ 10-15 giây trên máy tính địa phương của tôi. Rất chậm. Đây có phải là vì đĩa đọc/ghi? Hoặc nó có thể là cái gì khác?Chèn các giá trị từ multidim. mảng sử dụng PDO mất nhiều thời gian. Có cách nào tốt hơn?
Đây là mảng của tôi (lần đầu tiên 4 hàng):
Array
(
[0] => Array
(
[0] => 3
[1] => 1
)
[1] => Array
(
[0] => 3
[1] => 2
)
[2] => Array
(
[0] => 3
[1] => 5
)
[3] => Array
(
[0] => 8
[1] => 1
)
)
Và đây là mã của tôi:
$stmt = $this->db->prepare("INSERT INTO sl_link_store_category (item_a_ID, item_b_ID) VALUES (:item_a_ID, :item_b_ID)");
foreach($my_array as $row) {
$stmt->execute(array(':item_a_ID' => $row[0], ':item_b_ID' => $row[1]));
}
SOLUTION
Đối với những người đang tự hỏi, eis cô của tôi giải pháp chèn nhiều hàng
chỉ sử dụng một $stmt->execute
:
$input_arr; // This array one has lots of values
$sql = "INSERT INTO sl_link_store_category (field_a, field_b) VALUES ";
$i = 0;
// I create the query string with unique prepared values
// I could probably have used a for loop since I'm not using any
// values from $row
foreach($input_arr as $row) {
$i++;
$sql .= "(:field_a_$i, :field_a_$i), ";
}
// Remove the last comma (and white space at the end)
$sql = substr(trim($sql), 0, -1);
$stmt = $this->db->prepare($sql);
// I need to create a new associative array with field name
// matching the prepared values in the SQL statement.
$i = 0;
$arr = array();
foreach($input_arr as $row) {
$i++;
$arr[":field_a_$i"] = $row[0];
$arr[":field_b_$i"] = $row[1];
}
$stmt->execute($arr);
}
Bạn đang sử dụng công cụ cơ sở dữ liệu nào (MyISAM, InnoDB ...)? – Matthew
@konforce - Tôi đang sử dụng InnobDB. – Steven
sau đó bạn có thể muốn xem xét việc thiết lập 'innodb_flush_log_at_trx_commit = 2' và' sync_binlog = 0' trong cấu hình MySQL trên máy phát triển của bạn. Điều này sẽ giảm thiểu xả đĩa và có thể tăng tốc ứng dụng của bạn bằng nhiều yếu tố. – Matthew