mazeltov7のweb断片

備忘録的なテキトーなことを書きます。(技術記事はQiitaに移行しました http://qiita.com/mazeltov7 )

PDOで大きなデータをまとめて入れた

bulk insertというらしい。
ぱっと見るにはここに書いた。

// 遅い、つらい
$sql = "insert into hoge_table (name, screen_name) values (:name, :screen_name)";
$stmt = $dbh->prepare($sql);
for($i=0;count($contents->statuses);$i++){
  $params = array(
    ":name" => $contents->statuses[$i]->name,
    ":screen_name" => $contents->statuses[$i]->screen_name
  )
  $stmt->execute($params);
}

これだと、一個ずつinsertしてて遅いのでつらい、ので、valuesをまとめてドンと入れたい。

$sql = 'insert into hoge_table (name, screen_name) values';
$insertQuery = array();
$insertData = array();
for($i=0;$i<count($contents->statuses);$i++) {
  $insertQuery[] = '(:name' . $i . ', :screen_name' . $i . ')';
  $insertData['name' . $i] = $contents->statuses[$i]->name;
  $insertData['screen_name' . $i] = $contents->statuses[$i]->screen_name;
if(!empty($insertQuery)) {
  $sql .= implode(', ', $insertQuery);
  $stmt = $dbh->prepare($sql);
  $stmt->execute($insertData);

これでvaluesをまとめてどん! 一気にまとめてデータ入るのきもちぃぃぃ