【问题标题】:500 Internal Server Error PHP timing out500 内部服务器错误 PHP 超时
【发布时间】:2015-09-03 14:29:07
【问题描述】:

我收到一个内部服务器错误,因为我的 PHP 脚本超时。我从 mySQL 数据库中取出 8000 行,并将每一行分成 3 个不同的表。

我对堆栈进行了一些研究,并将其作为解决方案:

set_time_limit(0);
ignore_user_abort(1);

现在,我只是在 chrome 中不再收到错误,但仍然没有添加到数据库中。

这是我正在做的一点点伪:

$db = new myConnectDB();
$query = "SELECT * FROM tableName";

$result = $db->query($query);
$numRows = $result->num_rows;


//beerName', '$style' , '$brewery', '$abv','$ibu','$breweryID', '$icon', '$iconBrew' , '$lat', '$long' , '$beerRating')";

for ($i=0; $i < 8000 ; $i++) { 

  //fetch associate
  $row = $result->fetch_assoc();

  //get all 13 variables from rom 

  $db2 = new myConnectDB();
  //insert some variables into 1st table
  mysqli_close($db2);

  //todo: insert BeerTable / check and 
  $db3 = new myConnectDB();
  //insert variables into second table
  mysqli_close($db3);

  //todo: insert BreweryTable / check and update
  $db4 = new myConnectDB();
  //insert variables into third table. 
  mysqli_close($db4);

}

echo $i;

【问题讨论】:

  • 您添加这些语句的错误原始错误的原因是什么?
  • 我想我正在尝试运行许多 SQL 插入。我有一个循环遍历 8000 行,每行进行 3 次插入....
  • 您是仅使用 PHP 将数据插入数据库,还是使用 javascript 并通过 ajax 进行?
  • 全部用 PHP 完成。基本上试图重新配置我的数据库
  • 只处理一行来调试您的应用程序。在这种情况下有效吗?

标签: php mysql


【解决方案1】:

在循环内建立和断开连接是不好的做法。尝试以这种方式重构您的代码:

$db = new myConnectDB();
$db2 = new myConnectDB();
$db3 = new myConnectDB();
$db4 = new myConnectDB();
$query = "SELECT * FROM tableName";

$result = $db->query($query);
$numRows = $result->num_rows;

$insertQuery1 = "INSERT INTO tbl1 (col1, col2, col3) VALUES";
$insertQuery2 = "INSERT INTO tbl2 (col1, col2, col3) VALUES";
$insertQuery3 = "INSERT INTO tbl3 (col1, col2, col3) VALUES";
for ($i=0; $i < 8000 ; $i++) { 

    //fetch associate
    $row = $result->fetch_assoc();

    //get all 13 variables from rom 

    //insert some variables into 1st table
    $insertQuery1 .= '(' . $val1 . ',' . $val2 . ',' . $val3 ')';

    //todo: insert BeerTable / check and 

    //insert variables into second table
    $insertQuery2 .= '(' . $val4 . ',' . $val5 . ',' . $val6 ')';

    //todo: insert BreweryTable / check and update

    //insert variables into third table. 
    $insertQuery1 .= '(' . $val7 . ',' . $val8 . ',' . $val9 ')';
}

$db1->query($insertQuery1);
$db2->query($insertQuery2);
$db3->query($insertQuery3);

mysqli_close($db2);
mysqli_close($db3);
mysqli_close($db4);

在这个概念中,您不会为每一行查询 3 个插入。您收集 3 个大插入查询并在循环后执行它们。所以这段代码会运行得更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 2018-01-15
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2016-03-10
    相关资源
    最近更新 更多