【问题标题】:Loading CSV file into mysql database using php使用php将CSV文件加载到mysql数据库中
【发布时间】:2014-10-07 00:34:52
【问题描述】:

我正在努力使用 PHP 从 csv 文件中加载信息,并希望将 csv(手机号码)的内容保存到 mysql 数据库表中。文件内容如下所示:

CSV 文件内容(每行单独的记录,没有逗号)

44762126064    
447508751    
4474669756    
44771466603    
444584871    
445574805    
447455471039    
44777451345
447460345819    
44793342963    
44734838672    
44752845528    
4474537291    
44779645078

我正在尝试使用表单上传 csv 文件并提交。代码读取 csv 文件并尝试将内容写入 mysql 表。问题是代码在一个数组元素中返回所有 csv 记录,如下所示:

Array( 
    [0] => 44762126064 447508751 4474669756 44771466603 444584871 445574805 447455471039 44777451345 447460345819 44793342963 44734838672 44752845528 4474537291 44779645078 
);

并将整个数组作为一条记录插入,而不是在 mysql 表中每行插入一个手机号码。

代码:

if (isset($_POST['submit'])) {
    if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
        echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>";
    echo "<h2>Displaying contents:</h2>";
    #    readfile($_FILES['filename']['tmp_name']);
}

//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

           $import="INSERT into mobilecsv(phoneMobile,status) values('$data[0]',0)";

    mysql_query($import) or die(mysql_error());
}

fclose($handle);

print "Import done";

}

我已经尝试过explode()array_slice() 等,但它们都没有帮助我拆分此数组内容以将它们保存为 mysql 数据库中的单独记录/电话号码。

如何拆分第一个数组元素的单个内容(如我的情况)以将它们保存为单独的单个记录,如我的 CSV 中出现的那样?我是一名新程序员,非常感谢您在这方面的帮助。谢谢

【问题讨论】:

  • 你试过explode(' ', $data[0]) 吗?
  • 如果您的文件实际上每行只有一个值,则不需要 fgetcsv() 业务。就做$lines = file('whatever.csv'); foreach($lines as $line) { insert into db }
  • @Webice 是的,我试过了,但它不起作用
  • $data 数组正在重新填充新数据,与来自 MySQL 的 fetch 请求相同。您无法回显 fgetcsv 函数的所有行的结果,除非您将找到的每一行存储到一个新数组中。如果您在 while 循环之前添加 $lines = array(); 某处。并在while循环中添加这个$lines[] = $data[0];。然后你可以print_r()var_dump $lines 数组在 while 循环后将所有电话号码放入适当的数组中。
  • @MarcB 不起作用,因为该值位于单个数组元素中:)

标签: php mysql arrays csv fgetcsv


【解决方案1】:

问题是 fgetcsv 没有检测到逗号分隔值 (CSV) 文件的核心。在文件顶部的 php 开始标记之后添加这一行:

ini_set("auto_detect_line_endings", true);

将您的导入代码更改为:

//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");
while(($data = fgetcsv($handle)) !== FALSE){
$phoneMobile = $line[0];

$import="INSERT into mobilecsv(phoneMobile,status) values('$phoneMobile',0)";
mysql_query($import) or die(mysql_error());
}

fclose($handle);

print "Import done";

}

【讨论】:

  • $phoneMobile旁边的方括号
  • 谢谢Len_D。那个对我有用。只需要稍作修改。太棒了:)
猜你喜欢
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2013-01-03
  • 2017-09-04
  • 2015-10-02
  • 1970-01-01
相关资源
最近更新 更多