Вставка значений из multidim. Массив с использованием PDO занимает много времени. Есть ли способ лучше? - PullRequest
5 голосов
/ 11 апреля 2011

Я получил массив из 650 строк.Вставка этого с помощью PDO занимает 10-15 секунд на моем локальном компьютере.Это очень медленно.Это из-за чтения / записи диска?Или это может быть что-то еще?

Это мой массив (первые 4 строки):

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
    )
)

А это мой код:

$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]));
}

РЕШЕНИЕ

Для тех, кто интересуется, она является моим решением для вставки нескольких строк
, используя только одну $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);
  }

1 Ответ

3 голосов
/ 11 апреля 2011

Причина, по которой это может быть медленным, может варьироваться в зависимости от множества факторов.

Попробуйте использовать один запрос для вставки нескольких записей PDO Prepared Вставляет несколько строк в одном запросе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...