0

jquery 経由で標準の $.ajax 呼び出しを使用して呼び出される次の PHP スクリプトを実行しています。この PHP スクリプトは、ストアド プロシージャを介して複数のレコードをデータベースに挿入します。この手順は単純な INSERT INTO です。

PHPスクリプトは

include_once '../Connections/define_connections.php';
$mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DBNAME);
$mysqli->set_charset("utf8");

for ($q=0;$q<50000;$q++){
    $varma  = $mysqli->prepare("CALL insert_qq(?,?,?)");
    $varma->bind_param('dds',$v1,$v2,$v3);
    $v1 = '1';
    $v2 = '2';
    $v3 = '3';
    $varma->execute();
};
$mysqli->close();

Mysqlプロシージャは

区切り記号 $$

CREATE DEFINER=`loopmap`@`%` PROCEDURE `insert_qq`(in latitude double,in longitude double,
in placename varchar(100))
BEGIN

insert into GEO_Structure values (default,default,default,default,latitude,longitude,
default,default,default,default,default,default,default,default,default,
default,default,default,default,default,default,default,default,default,default,default,
placename,default,default,default);

END

問題は、ループの数が約 10K の場合、このコードは問題なく動作しますが、その数を超えると、たとえばここに示すように 50K になると、いくつかの問題が発生することです。各レコードは 2 回挿入されます。これは、ストアド プロシージャがループごとに 2 回呼び出されることを示しています。

これにより、この場合、データベースに 100K レコードが生成されます。また、firebug が赤いエラーを返すため、何かが間違っていることを確認することもできます (ただし、発生したエラーについては何も指定されておらず、コードも説明もされていません)。

興味深いことに、ループが 10K に達すると、各レコードが正しく挿入され (ストアド プロシージャはループごとに 1 回だけ呼び出されます)、firebug はエラーをスローしません (成功を返します)。これが失敗し始める重要な数のループがあるようです。

4

0 に答える 0