Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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 Mysqli:循环18000条记录,出现致命错误:即使在5分钟后,执行时间也最长_Php_Mysql - Fatal编程技术网

Php Mysqli:循环18000条记录,出现致命错误:即使在5分钟后,执行时间也最长

Php Mysqli:循环18000条记录,出现致命错误:即使在5分钟后,执行时间也最长,php,mysql,Php,Mysql,我正在重命名“code”列中的数据,每个循环有9000条记录。我第一次尝试显示来自两个循环的数据,结果成功了。但当我从每个循环中添加update语句时,即使将执行时间调整为300秒,我也会得到一个最大执行时间。我写的sql是否正确 使用sql调用分页系统,因为服务器内存无法处理所有请求,所以需要使用分页。我没有尝试找出整个代码,但在PHP或任何其他语言中循环这样的数据通常是不好的做法。从外观上看,您应该能够为此创建一个查询。这样做永远不会令人满意。@PatrickSavalle循环数据的正确方法

我正在重命名“code”列中的数据,每个循环有9000条记录。我第一次尝试显示来自两个循环的数据,结果成功了。但当我从每个循环中添加update语句时,即使将执行时间调整为300秒,我也会得到一个最大执行时间。我写的sql是否正确

使用sql调用分页系统,因为服务器内存无法处理所有请求,所以需要使用分页。我没有尝试找出整个代码,但在PHP或任何其他语言中循环这样的数据通常是不好的做法。从外观上看,您应该能够为此创建一个查询。这样做永远不会令人满意。@PatrickSavalle循环数据的正确方法是什么?你能给我一个推荐信吗?比如说加入。许多网络程序员有一些非常坏的习惯。例如,不使用关系模型,而是使用ISAM表。或者在应用程序代码中执行数据处理和引用完整性检查,而不是考虑正确的查询。在一个循环中执行数千个查询几乎总是错误的。一旦您理解了SQL,它就是一种非常强大的语言。在SQL中,联接通常是“循环”或“数据迭代”的替换。您所执行的更新循环可能会被正确的联接语句替换,从而生成一个查询。我不理解你的代码,所以我可能错了,但这只是我作为一名经验丰富的数据建模师和编码员的直觉
<?php
    ini_set('max_execution_time', 300); //300 seconds = 5 minutes
    $par1='0';

    $db -> autocommit(FALSE); // start transaction

    $stmtInv = $db->prepare("SELECT invoice,date,route,customer FROM test WHERE type = ? GROUP BY invoice");
    $par1="Sales Receipt";
    $stmtInv -> bind_param('s',$par1);
    $stmtInv -> execute();
    $stmtInv -> bind_result($invoice,$date,$route,$customer);

    // loop 9,000 records
    while($stmtInv -> fetch()){ 
         //update statements
    }

    $stmtInv -> free_result();

    $stmt = $db->prepare("SELECT code, pid FROM test");
    $stmt -> execute();
    $stmt -> store_result();
    $stmt -> bind_result($code,$id);

    // loop 9,000 records
    while($stmt -> fetch()){
        $stmtUpdate = $db->prepare("UPDATE test SET code = ? WHERE code = ?");
        $par1="test";$par2="test";
        $stmtUpdate -> bind_param("ss",$par1,$par2);
        $stmtUpdate -> execute();

        $stmtId = $db->prepare("UPDATE test t INNER JOIN products p ON (t.code = p.Pr_code) SET t.pid = p.Pr_id");
        $stmtId -> execute();
    }

    $stmt -> free_result();

    $db -> autocommit(TRUE);
?>