gpt4 book ai didi

php - 从 CSV 执行大型 MySQL 插入时出现错误 500 或内容编码错误

转载 作者:行者123 更新时间:2023-11-29 18:29:34 25 4
gpt4 key购买 nike

/开始注释该问题被标记为“重复”。它与引用的问题不同,因为在我的应用程序中,我无法使用 LOAD IN,因为输入文件永远不会被很好地格式化,因此我必须逐行读取它以测试有效记录。

另外:在我的工作代码中,我已从 mysql_ 更改为 mysqli,并且出现了相同的症状。

另外:我的主机提供商告诉我,我收到的浏览器错误(500 或内容编码错误)不会显示在服务器日志中。

我想重新打开此问题并了解如何解决该问题。/尾注

我在 Firefox 和 Chrome 中尝试从 CSV 文件将记录插入 MySQL 时遇到错误。 CSV 文件有 300,000 行。它要么是“无法显示您尝试查看的页面,因为它使用了无效或不受支持的压缩形式。”或者只是错误 500。

问题是缓冲区被填满了吗?我尝试使用ob_clean()和flush(),但这不起作用。有想法吗?

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Process uploaded CSV file for Seatac Noise</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<?php
error_reporting(E_ALL);
//echo "<pre>" . PHP_EOL;
$database = "jch";
$user = "jch";
$password = "password";
$connector = 'jch.55.com';
$link = mysql_connect($connector,$user,$password);
mysql_select_db($database) or die( "Unable to select database");
$filter = $_POST["filter"];
$uploaddir = '/uploads';

$path = $uploaddir . $filter . basename($_FILES['ufile']['name']);

if($ufile != none)
{
if (move_uploaded_file($_FILES['ufile']['tmp_name'], $path)) {
echo "File is valid and was successfully uploaded.\n";

$row = 0;
if (($handle = fopen($path, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;

if( strlen($data[4]) > 0 )
{

$monitor_id = $data[1];
$time = date("Y-m-d H:i:s", strtotime($data[0]));

echo('<p>' . $time . ' rows processed: ' . $row . '</p>');

$noise_level = $data[2];
$flight_id = $data[4];
$aircraft_type = $data[3];

$query="INSERT INTO jch_noise_detail_copy (
monitor_id,
time,
noise_level,
flight_id,
aircraft_type)
VALUES(" .
"'" . $monitor_id . "','" .
$time . "'," .
$noise_level . ",'" .
$flight_id . "','" .
$aircraft_type . "')";

$result = mysql_query($query);
if( mysql_errno($link)!= 0 ){
echo $query . "\n";
echo mysql_errno($link) . ": " . mysql_error($link) . "\n" ;
}
}

} // end while
mysql_close();


}

}
else
echo 'No Rows found matching this date or filter';
}
mysql_close();
fclose($handle);
?>
</body>
</html>

最佳答案

在此代码中,您将插入 300,000 行,其中包含 300,000 次单独的插入。每次 mysql_query() 都会创建一个从 php 到 mysql 的单独调用。

您可以使用批量插入对其进行优化 - MySQL Reference

最后查询将如下所示:

INSERT INTO jch_noise_detail_copy (
monitor_id,
time,
noise_level,
flight_id,
aircraft_type
) VALUES ($monitor_id_0, time_0 ...), ($monitor_id_1, time_1, ...), ..., ($monitor_id_N, time_N, ...);

关于php - 从 CSV 执行大型 MySQL 插入时出现错误 500 或内容编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45826006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com