我需要解析硬csv文件并将其放到MySQL中。
1.csv:
"col1,""col21, col22, col23"",""col3"",""col41, col42""
我的测试php脚本文件:
<?php
$connection = mysql_connect('127.0.0.1:3307','a','') or die ("Unable to connect!");
mysql_select_db('test') or die ("Unable to select database!");
mysql_query('SET NAMES utf8');
$fp = fopen("1.csv", "r") or die("Couldn't open filename");
while (($data = fgetcsv($fp, 0, ",", "'")) !== FALSE)
{
$import="INSERT INTO iptable(col1,col2,col3,col4) values('$data[0]','$data[1]','$data[2]','$data[3]')";
mysql_query($import) or die(mysql_error());
}
fclose($fp);
echo '<b>Successfully added to DB</b>';
?>
我需要插入iptable VALUES(&#39; col1&#39;,&#39; col21,col22,col23&#39;,&#39; col3&#39;,&#39; col41,col42&# 39)。我该怎么做? (如何正确地分开它们?)。
我的csv文件不正确,但我需要解析它的数据。 iptable(col1,col2,col3,col4)。 (4栏)
例如,Excel正确地将此csv文件转换为列。 (http://goo.gl/xm0bly)
答案 0 :(得分:0)
这是一些函数(explode,str_replace)和foreach语句中的一些逻辑的轻微混合,但是如果您的输入将按预期放入数据:
while (($data = fgetcsv($fp, 0, ",", "'")) !== FALSE)
{
$array=explode('""', $data);
$line=array();
foreach($array as $val)
{
if(trim($val)!="," && trim($val))
{
$line[]=str_replace('"', '', $val);
}
}
$import="INSERT INTO iptable(col1,col2,col3,col4) values('$line[0]','$line[1]','$line[2]','$line[3]')";
mysql_query($import) or die(mysql_error());
}
根据问题中显示的输入,$line
数组显示为:
Array
(
[0] => col1,
[1] => col21, col22, col23
[2] => col3
[3] => col41, col42
)
编辑:根据您的输入字符串,以下代码输出以下文本:
<?php
$string='"col1,""col21, col22, col23"",""col3"",""col41, col42"" ';
echo "String input:\r\n".$string."\r\n";
$array=explode('""', $string);
$line=array();
foreach($array as $val)
{
if(trim($val)!="," && trim($val))
{
$line[]=str_replace('"', '', $val);
}
}
echo '$line variable is currently:'."\r\n";
print_r($line);
?>
输出:
String input:
"col1,""col21, col22, col23"",""col3"",""col41, col42""
$line variable is currently:
Array
(
[0] => col1,
[1] => col21, col22, col23
[2] => col3
[3] => col41, col42
)
答案 1 :(得分:-2)
您可以使用LOAD DATA语句直接将CSV数据存储到MYSQL中,而不是使用PHP读取CSV文件并存储INTO DB。