Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组到MYSQL的插入在11000行之后停止_Php_Mysql_Arrays_Limit - Fatal编程技术网

PHP数组到MYSQL的插入在11000行之后停止

PHP数组到MYSQL的插入在11000行之后停止,php,mysql,arrays,limit,Php,Mysql,Arrays,Limit,目前,我通过从URL下载csv文件并使用str\u getcsv()对其进行解析,获得了一个二维PHP数据数组 之后,我循环遍历每一行,并将值插入相应的SQL列: foreach($array as $a=>$value){ //defining variables $sql = "INSERT INTO Ranking (ra, na, sc, kd, wi, ki, de, sh, ti) VALUES ('$ra','$na','$sc','

目前,我通过从URL下载csv文件并使用
str\u getcsv()
对其进行解析,获得了一个二维PHP数据数组

之后,我循环遍历每一行,并将值插入相应的SQL列:

foreach($array as $a=>$value){

    //defining variables

    $sql = "INSERT INTO Ranking (ra, na, sc, kd, wi, ki, de, sh, ti)
           VALUES ('$ra','$na','$sc','$kd','$wi','$ki','$de','$sh','$ti')";

    $conn->query($sql);
}

$conn->close();
我有大约16000行数据,但奇怪的是,插入正好在10999行之后停止。大约929KB

我找不到原因,因为我的主机提供商声明没有行限制。我不认为PHP文件的执行会因为执行时间限制而停止,因为在这个插入命令之后,数组也会存储在本地,而这会在文件下载后4秒左右发生

foreach()
-循环是否有某种时间限制?在执行了一定数量的死刑后它会停止吗?如果我只使用一个sql查询连接一次,它会工作吗

更新:

结果显示sql导入时间已超过

Fatal error: Maximum execution time of 10 seconds exceeded
in /home/mainhost/public_html/phpMyAdmin/libraries/import/sql.php on line 118
(phpmyadmin中手动插入尝试的输出)


我该怎么办?将输入拆分为两个查询?

我不知道以下内容是否有帮助-您可能需要调整它,但如上所述,在循环中插入多次

填充值数组后构建sql并执行一次

$values=array();
foreach( $array as $a => $value ){
    $values[]="('$ra','$na','$sc','$kd','$wi','$ki','$de','$sh','$ti')";
}
$sql="INSERT INTO `Ranking` (`ra`,`na`,`sc`,`kd`,`wi`,`ki`,`de`,`sh`,`ti`)
      values ".implode( ','.PHP_EOL, $values ).";";

$conn->query( $sql );

我不知道下面的内容是否有帮助-您可能需要对其进行调整,但如上所述,在循环中多次插入

填充值数组后构建sql并执行一次

$values=array();
foreach( $array as $a => $value ){
    $values[]="('$ra','$na','$sc','$kd','$wi','$ki','$de','$sh','$ti')";
}
$sql="INSERT INTO `Ranking` (`ra`,`na`,`sc`,`kd`,`wi`,`ki`,`de`,`sh`,`ti`)
      values ".implode( ','.PHP_EOL, $values ).";";

$conn->query( $sql );

我不知道下面的内容是否有帮助-您可能需要对其进行调整,但如上所述,在循环中多次插入

填充值数组后构建sql并执行一次

$values=array();
foreach( $array as $a => $value ){
    $values[]="('$ra','$na','$sc','$kd','$wi','$ki','$de','$sh','$ti')";
}
$sql="INSERT INTO `Ranking` (`ra`,`na`,`sc`,`kd`,`wi`,`ki`,`de`,`sh`,`ti`)
      values ".implode( ','.PHP_EOL, $values ).";";

$conn->query( $sql );

我不知道下面的内容是否有帮助-您可能需要对其进行调整,但如上所述,在循环中多次插入

填充值数组后构建sql并执行一次

$values=array();
foreach( $array as $a => $value ){
    $values[]="('$ra','$na','$sc','$kd','$wi','$ki','$de','$sh','$ti')";
}
$sql="INSERT INTO `Ranking` (`ra`,`na`,`sc`,`kd`,`wi`,`ki`,`de`,`sh`,`ti`)
      values ".implode( ','.PHP_EOL, $values ).";";

$conn->query( $sql );

我知道这不能直接回答你的问题,但更好的解决办法是:

$sql = '';

foreach($array as $a=>$value){

    //defining variables

    $sql .= "INSERT INTO Ranking (ra, na, sc, kd, wi, ki, de, sh, ti)
           VALUES ('$ra','$na','$sc','$kd','$wi','$ki','$de','$sh','$ti')";

}

$conn->query($sql);

$conn->close();

原因是您只有1次往返DB。不管这是否只是一个本地连接,将插入批处理在一起仍然更有效。这应该可以让你同时绕过你所看到的限制。

我知道这并不能直接回答你的问题,但更好的解决办法是:

$sql = '';

foreach($array as $a=>$value){

    //defining variables

    $sql .= "INSERT INTO Ranking (ra, na, sc, kd, wi, ki, de, sh, ti)
           VALUES ('$ra','$na','$sc','$kd','$wi','$ki','$de','$sh','$ti')";

}

$conn->query($sql);

$conn->close();

原因是您只有1次往返DB。不管这是否只是一个本地连接,将插入批处理在一起仍然更有效。这应该可以让你同时绕过你所看到的限制。

我知道这并不能直接回答你的问题,但更好的解决办法是:

$sql = '';

foreach($array as $a=>$value){

    //defining variables

    $sql .= "INSERT INTO Ranking (ra, na, sc, kd, wi, ki, de, sh, ti)
           VALUES ('$ra','$na','$sc','$kd','$wi','$ki','$de','$sh','$ti')";

}

$conn->query($sql);

$conn->close();

原因是您只有1次往返DB。不管这是否只是一个本地连接,将插入批处理在一起仍然更有效。这应该可以让你同时绕过你所看到的限制。

我知道这并不能直接回答你的问题,但更好的解决办法是:

$sql = '';

foreach($array as $a=>$value){

    //defining variables

    $sql .= "INSERT INTO Ranking (ra, na, sc, kd, wi, ki, de, sh, ti)
           VALUES ('$ra','$na','$sc','$kd','$wi','$ki','$de','$sh','$ti')";

}

$conn->query($sql);

$conn->close();

原因是您只有1次往返DB。不管这是否只是一个本地连接,将插入批处理在一起仍然更有效。这将使您同时绕过所看到的限制。

想出了一个解决方案

由于遍历所有行的方式都不正确,并且查询整个数组超过了导入时间,因此我将它们组合在一起,以便一次导入6000行,这对我来说效果很好

foreach($array as $a=>$value){
    $i += 1;
    if(!fmod($i / 6000, 1) == 1){
        $sql = substr($sql, 0, -1);
        $conn->query($sql);
        $sql = "INSERT INTO Ranking (rank, name, score, kd, wins, kills, deaths, shots, time) VALUES ";
    }

    //defining variables

    $sql .= "('$ra',' $na ','$sc','$kd','$wi','$ki','$de','$sh','$ti'),";
}

$sql = substr($sql, 0, -1);

祝你有愉快的一天

想出了一个解决办法

由于遍历所有行的方式都不正确,并且查询整个数组超过了导入时间,因此我将它们组合在一起,以便一次导入6000行,这对我来说效果很好

foreach($array as $a=>$value){
    $i += 1;
    if(!fmod($i / 6000, 1) == 1){
        $sql = substr($sql, 0, -1);
        $conn->query($sql);
        $sql = "INSERT INTO Ranking (rank, name, score, kd, wins, kills, deaths, shots, time) VALUES ";
    }

    //defining variables

    $sql .= "('$ra',' $na ','$sc','$kd','$wi','$ki','$de','$sh','$ti'),";
}

$sql = substr($sql, 0, -1);

祝你有愉快的一天

想出了一个解决办法

由于遍历所有行的方式都不正确,并且查询整个数组超过了导入时间,因此我将它们组合在一起,以便一次导入6000行,这对我来说效果很好

foreach($array as $a=>$value){
    $i += 1;
    if(!fmod($i / 6000, 1) == 1){
        $sql = substr($sql, 0, -1);
        $conn->query($sql);
        $sql = "INSERT INTO Ranking (rank, name, score, kd, wins, kills, deaths, shots, time) VALUES ";
    }

    //defining variables

    $sql .= "('$ra',' $na ','$sc','$kd','$wi','$ki','$de','$sh','$ti'),";
}

$sql = substr($sql, 0, -1);

祝你有愉快的一天

想出了一个解决办法

由于遍历所有行的方式都不正确,并且查询整个数组超过了导入时间,因此我将它们组合在一起,以便一次导入6000行,这对我来说效果很好

foreach($array as $a=>$value){
    $i += 1;
    if(!fmod($i / 6000, 1) == 1){
        $sql = substr($sql, 0, -1);
        $conn->query($sql);
        $sql = "INSERT INTO Ranking (rank, name, score, kd, wins, kills, deaths, shots, time) VALUES ";
    }

    //defining variables

    $sql .= "('$ra',' $na ','$sc','$kd','$wi','$ki','$de','$sh','$ti'),";
}

$sql = substr($sql, 0, -1);


祝你有愉快的一天

是否显示PHP错误?他们什么也没告诉你?
count($array)
是否给出结果>10999?哦,天哪,你实际上是在插入一个循环?永远不要那样做。您的执行时间和可用内存是有限的。从CLI运行此脚本,以确定您的脚本是否正在消亡,或者它是否是处理器。我不显示错误,但由于文件路径不同,该文件只能由服务器以任何方式(cronjob)成功执行。我可以稍后再试试。我知道长度大于10999,因为本地存储file@Andrew我同意,但实际上可以让别人知道你所知道的东西,而不使用措辞,就像他们不知道一样愚蠢。你会显示PHP错误吗?他们什么也没告诉你?
count($array)
是否给出结果>10999?哦,天哪,你实际上是在插入一个循环?永远不要那样做。您的执行时间和可用内存是有限的。从CLI运行此脚本,以确定您的脚本是否正在消亡,或者它是否是处理器。我不显示错误,但由于文件路径不同,该文件只能由服务器以任何方式(cronjob)成功执行。我可以稍后再试试。我知道长度大于10999,因为本地存储file@Andrew我同意,但实际上可以让别人知道你知道的事情