Php Mysqli:循环18000条记录,出现致命错误:即使在5分钟后,执行时间也最长
我正在重命名“code”列中的数据,每个循环有9000条记录。我第一次尝试显示来自两个循环的数据,结果成功了。但当我从每个循环中添加update语句时,即使将执行时间调整为300秒,我也会得到一个最大执行时间。我写的sql是否正确 使用sql调用分页系统,因为服务器内存无法处理所有请求,所以需要使用分页。我没有尝试找出整个代码,但在PHP或任何其他语言中循环这样的数据通常是不好的做法。从外观上看,您应该能够为此创建一个查询。这样做永远不会令人满意。@PatrickSavalle循环数据的正确方法是什么?你能给我一个推荐信吗?比如说加入。许多网络程序员有一些非常坏的习惯。例如,不使用关系模型,而是使用ISAM表。或者在应用程序代码中执行数据处理和引用完整性检查,而不是考虑正确的查询。在一个循环中执行数千个查询几乎总是错误的。一旦您理解了SQL,它就是一种非常强大的语言。在SQL中,联接通常是“循环”或“数据迭代”的替换。您所执行的更新循环可能会被正确的联接语句替换,从而生成一个查询。我不理解你的代码,所以我可能错了,但这只是我作为一名经验丰富的数据建模师和编码员的直觉Php Mysqli:循环18000条记录,出现致命错误:即使在5分钟后,执行时间也最长,php,mysql,Php,Mysql,我正在重命名“code”列中的数据,每个循环有9000条记录。我第一次尝试显示来自两个循环的数据,结果成功了。但当我从每个循环中添加update语句时,即使将执行时间调整为300秒,我也会得到一个最大执行时间。我写的sql是否正确 使用sql调用分页系统,因为服务器内存无法处理所有请求,所以需要使用分页。我没有尝试找出整个代码,但在PHP或任何其他语言中循环这样的数据通常是不好的做法。从外观上看,您应该能够为此创建一个查询。这样做永远不会令人满意。@PatrickSavalle循环数据的正确方法
<?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);
?>