【问题标题】:How to read the data in csv and upload to Mysql如何读取csv中的数据并上传到Mysql
【发布时间】:2013-08-31 05:10:31
【问题描述】:

我有一个 csv 文件,格式如下:

"**Table1"
"*Field1","*Field2","*Field3","*Field4"
"Data1","Data2", "Data3", "Data4"

"**Table2"
"*Field1","*Field2","*Field3","*Field4"
"Data1","Data2", "Data3", "Data4"

我希望程序能够识别表 1/ 2 并将数据上传到 mysql 预定义表。我打算使用PHP。有没有人尝试过这样做?我正在寻找一个例子和方法!谢谢。

【问题讨论】:

标签: php mysql parsing


【解决方案1】:

你可以试试这样的:

$handle = fopen("./myfile.csv", "r");
if ($handle === FALSE) {
  exit();
}
// ignore header
fgetcsv($handle, 1000, ",");

// generate SQL query
$sql = "INSERT INTO `mytable` (col1, col2, ...) VALUES ";
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  $sql .= '("'.$data[0].'", "'.$data[1].'", "'.$data[2].'", ...),';
}
$sql = substr($sql,0,strlen($sql)-1).';';
// then execute your query

已编辑

【讨论】:

  • 好像不行。我用下面的代码复制了一些: PHP 注意:未定义的偏移量:第 26 行的 /home/ubuntu/parse_mysql 中的 3 PHP 注意:未定义的偏移量:第 26 行的 /home/ubuntu/parse_mysql 中的 4
  • $sql = "INSERT INTO Table1 (Field1, Field2, Field3, Field4, Field5, Field6, Field7, Field8) 值 ";而 (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) { $sql .= '("'.$data[0].'", "'.$data[1 ].'", "'.$data[2].'", "'.$data[3].'", "'.$data[4].'", "'.$data[5]. '", "'.$data[6].'", "'.$data[7].'"),';
  • @wingsuecheung 是的,抱歉我的错误,我忘记在while 语句中将"\t" 替换为",",它现在应该可以工作了(代码已编辑)
【解决方案2】:

这个库可能会让你的事情变得更容易:https://code.google.com/p/php-csv-parser/。我在最近的一个项目中使用了它,我需要解析 CSV 并插入 MySQL 数据库。

您可以使用$csv->getCell($x, $y) 选择要插入的表格,其中$x$y 指向带有"Table1""Table2" 的单元格。

所以你可以这样做:

$table_name = $csv->getCell($x, $y);
if( $table_name === "Table1" ) {
   // code to insert into table 1
} else if( $table_name === "Table2" ) {
   // code to insert into table 2
}

【讨论】:

  • 谢谢。这是否意味着它能够搜索表名,例如表 1?
  • 不用担心。是的,您需要将以上所有内容放在一个循环中。然后你需要查看里面有表名的单元格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多