PHP CSV 上传脚本,使用新行?

标签 php mysql csv upload

我正在尝试将 CSV 导入到 MySQL 数据库中,其中每个新行都应该代表数据库中的一个新行。

这是我目前在 CSV 中的内容:

1one, 1two, 1three, 1four
2one, 2two, 2three, 2four

在应用程序中:

$handle = fopen($_FILES['filename']['tmp_name'], "r");
$data = fgetcsv($handle, 1000, ",");

$sql = "INSERT INTO tbl (col1, col2, col3, col4) VALUES (?, ?, ?, ?)";
$q = $c->prepare($sql);

$q->execute(array($data[0],$data[1],$data[2],$data[3]))

问题是只插入了前四个值,显然是由于缺少循环。

我可以想到两个方案来解决这个问题:

1) 做一些“hacky”for 循环,记住索引的位置,然后对每个插入的数组值执行 n+1。

2) 意识到 fgetcsv 不是我需要的函数,还有更好的方法来处理换行!

谢谢!

最佳答案

while ($data = fgetcsv($handle, 1000, ",")){
  //process each $data row
}

您可能还希望在 php.ini 中将 auto_detect_line_endings 设置为 true,以避免 Mac 创建的 CSV 出现问题。

关于PHP CSV 上传脚本,使用新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11794705/

相关文章:

php - SELECT 是同步的还是异步的?

mysql - 不使用子查询重写查询

mysql - 使用 CSV 更新 MySQL 表记录

java - 寻找允许按名称读取列的 Java CSV 库

python - 如何从包含单行所有关系的csv文件中获取关系数据?

php - 使用XAMPP和Codeigniter发送电子邮件

php - 匹配mysql中split后的精确子串

PHP 相当于一个 javascript 时间戳(毫秒不是微秒)

Mysql触发器,声明一个变量并将其用作列名

mysql - 使用另一个表列中的数据更新列