我正在运行通过 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,如图所示,会出现一些问题。每条记录被插入两次,这表明存储过程可能在每个循环中被调用两次。
在这种情况下,这会在我的数据库中产生 10 万条记录。我还可以验证是否有问题,因为 firebug 返回一个红色错误(但它没有指定任何内容,也没有指定任何代码,也没有对遇到的错误进行任何描述)。
有趣的是,正如我所提到的,当循环达到 10K 时,每条记录都会正确插入(每个循环只调用一次存储过程)并且 firebug 不会抛出任何错误(它返回成功)。似乎有一个临界数量的循环开始失败。