ver.1サポートサイト


多数レコード挿入(PHP)

最終更新日:2023年02月27日

データベースへの多数レコードの挿入は、database/bulk_insert を使って最大1000行を一括して挿入してください。

通常のinsertを繰り返すと、API呼び出しオーバーヘッドが大きく時間がかかることと、APIアクセス頻度(オプション利用時の標準では600回/分)に制限され、多数のレコードの挿入ができません。

1000行以上のレコードを挿入する場合は、以下のサンプルプログラムのように、1000行単位のbulk_insertを繰り返してください。

<?php

define("APIURL", "https://xxx.smp.ne.jp/api/service");
define("TOKEN", "0000000・・・・00000000");
define("SECRET", " 0000000・・・・00000000 ");

// 送信パラメータを設定します
$parameters = array();
$parameters["db_title"] = "testdata";
$parameters["columns"] = array(
    "name", "furigana", "email", "gender", "ageyo", "birthday", "maritalstat",
    "prefecture", "telephone", "carrier", "style"
);

// ファイルからデータを読み取り、bulk_insert APIメソッドを呼び出します
$line = file("records10000.txt");
$n = 0;
$parameters["data"] = array();
for ($i = 0; $i < count($line); $i++) {
    $data = explode("\t", $line[$i]);
    if (count($data) == count($parameters["columns"])) {
        array_push($parameters["data"], $data);
        if (count($parameters["data"]) >= 1000) {
            bulk_insert($parameters);
            $parameters["data"] = array();
        }
    }
}
if (count($parameters["data"]) > 0) {
    bulk_insert($parameters);
}
exit(0);

// database/bulk_insert API 呼び出し用の関数
function bulk_insert($param_parameters)
{
    $api_headers = array(
        "X-SPIRAL-API: database/bulk_insert/request",
        "Content-Type: application/json; charset=UTF-8",
    );
    $param_parameters["spiral_api_token"] = TOKEN;
    $param_parameters["passkey"] = time();
    $key = $param_parameters["spiral_api_token"] . "&" . $param_parameters["passkey"];
    $param_parameters["signature"] = hash_hmac('sha1', $key, SECRET, false);
    $json = json_encode($param_parameters);
    $curl = curl_init(APIURL);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $api_headers);
    curl_exec($curl);
    if (curl_errno($curl)) echo curl_error($curl);
    $returnval = curl_multi_getcontent($curl);
    curl_close($curl);
    return $returnval;
}
?>