gpt4 book ai didi

php - 将csv文件上传到MySQL数据库而不逐行插入

转载 作者:行者123 更新时间:2023-11-29 06:27:36 24 4
gpt4 key购买 nike

我有一个网站,用户可以在其中上传 csv 文件。每个文件可能有不同数量的列和行,我使用以下内容来处理 csv 文件的上传,然后将此数据写入新表中。这一切都有效,但如果 csv 文件很大,速度可能会很慢。逐行写入数据很慢,我想知道是否有一种方法可以将整个 csv 文件($matrix - 见下文)一次性写入新创建的 SQL 表中?

//Handling the csv file and reading data into $matrix
$file = $_FILES['csv1']['tmp_name'];
$handle = fopen($file,"r");
$colsMax=0;

$matrix = array();
while (($row = fgetcsv($handle, 10000, ",")) !== FALSE) {
$matrix[] = $row;
}
$rows = count($matrix);
$cols = count($matrix[$row]);

然后,我在数据库中创建一个具有正确列数的表(字段名称为 A1、A2 等,稍后会更改):

//create importDataTable table for all the data
$sql = "CREATE TABLE $tblImportedData (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY";
for ($colloop=0; $colloop<$cols; $colloop++) {
$sql = $sql . ", A$colloop VARCHAR(80)";
}
$sql = $sql . ");";
mysqli_query($connect, $sql);

然后将数据逐行插入到表中:

for ($rowloop=0; $rowloop < $rows; $rowloop++) { //loops through each row
$dataToWrite = $matrix[$rowloop][0];
$sql = "INSERT INTO $tblImportedData SET ";
for ($colloop=0; $colloop < $cols; $colloop++) { //loops through each column
$dataToWrite = isset($matrix[$rowloop][$colloop]) ? $matrix[$rowloop][$colloop] : '';
$sql = $sql . ", A$colloop = '" . $dataToWrite . "'";
}
$sql = $sql . ";";
mysqli_query($connect, $sql);
}

最佳答案

正如 @tadman 在他的评论中建议的那样,您应该使用 LOAD DATA INFILE mysql 开箱即用的功能。

关于php - 将csv文件上传到MySQL数据库而不逐行插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58595538/

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