我正在做一个PHP脚本,将CSV文件上传到数据库。问题是我有很多时间非常大的CSV,包含超过1.000行,但是我只需要一个,尤其是上周的一个(例如2018.07.01)。 上传是使用表单完成的。
这是html
格式 <form action="home2.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
UPLOAD CSV: <br />
<input name="csv" type="file" id="csv" />
<input type="submit" name="submit" value="Upload" />
这是我用来上传home2.php文件中所有csv的代码
if ($_FILES[csv][size] > 0) {
//get the csv file
$file = $_FILES[csv][tmp_name];
$handle = fopen($file,"r");
//loop through the csv file and insert into database
do {
if ($data[0]) {
mysqli_query($con,"INSERT INTO db (id, date, hour, open, max, min, close, volume) VALUES
(
'',
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".addslashes($data[2])."',
'".addslashes($data[3])."',
'".addslashes($data[4])."',
'".addslashes($data[5])."',
'".addslashes($data[6])."'
)
");
}
} while ($data = fgetcsv($handle,1000,",","'"));
答案 0 :(得分:0)
我希望这段代码可以为您提供帮助
$dateFilter = "2018-07-07";
if ($_FILES[csv][size] > 0) {
//get the csv file
$file = $_FILES[csv][tmp_name];
$csvData = file_get_contents($file);
$lines = explode(PHP_EOL, $csvData);
foreach ($lines as $line) {
$lineArr = str_getcsv($line);
if ($lineArr[0] == $dateFilter) {
$slashesValues = array_map('addslashes', array_values($lineArr));
mysqli_query($con, "INSERT INTO db (`date`, `hour`, `open`, `max`, `min`, `close`, `volume`)
VALUES (implode(',', $slashesValues))");
}
}
}