2013-05-08 39 views
1

我有一个CSV文件格式如下:插件组到MySQL表

a;a1;1;0;1 
b;b1;1;0;0 

,并使用PHP脚本下面我可以把它转换成这样:

a;a1;1; 
a;a1;0; 
a;a1;1; 
b;b1;1; 
b;b1;0; 
b;b1;0; 

使用此:

$data = array(); 
foreach($lines as $value) { 
    $value = explode(";", $value); 

    $first = array_splice($value, 0, 2); 

    foreach($value as $x){ 
     $row = $first; 
     $row[] = $x; 
     $data[] = implode(';', $row); 
    } 
} 

其中输出是一个阵列:

array(6) { 
    [0]=> 
    string(6) "a;a1;1" 
    [1]=> 
    string(6) "a;a1;0" 
    [2]=> 
    string(6) "a;a1;1" 
    [3]=> 
    string(6) "b;b1;1" 
    [4]=> 
    string(6) "b;b1;0" 
    [5]=> 
    string(6) "b;b1;0" 
} 

现在我想要插入此阵,我已经建立了一个mysql表,但我有麻烦......

$file = "_ss.csv"; 
$lines = file($file); 
$count = count($lines); 
$data = array(); 
$i = 0; 
foreach($lines as $value){ 
    $value = explode(";", $value); 
    $first = array_splice($value, 0, 2); 

    foreach($value as $x){ 

     $row = $first; 
     $row[] = $x; 
     $data[] = implode(',', $row); 
     $dump = implode(',', $data); 
     $query="INSERT INTO csv_test2 VALUES ('$dump')"; 
     $init=mysql_query($query); 
$i++; 
echo $dump; 

    } 
} 

echo "<pre>"; 
print_r($dump); 
echo "</pre>"; 

任何想法如何使它工作吗?

+0

你想如何让你的数据在表中? – Aquillo 2013-05-08 09:23:41

+0

您的数据中可能有一些''''或''' – Kasyx 2013-05-08 09:24:38

+0

数据如描述中所示... – 2013-05-08 09:25:19

回答

0

您有2种选择:

  1. 商店如MySQL的序列化(使用BLOB类型的列)
  2. 阵列编码成JSON并将其存储在MySQL在BLOB列阵列

UPDATE:用于序列化示例代码,请记住,blob_test2表具有其中序列化阵列被插入BLOB列

$file = "_ss.csv"; 
$lines = file($file); 
$count = count($lines); 
$data = array(); 
$i = 0; 
foreach($lines as $value){ 
    $value = explode(";", $value); 
    $query="INSERT INTO blob_test2 VALUES ('".serialize($value)."')"; 
    $init=mysql_query($query); 
} 
+0

你可以举一个例子来说明如何序列化数据在我的案例中 – 2013-05-08 09:29:59

+0

我已经更新了一个swer – Stephan 2013-05-08 09:47:59

+0

感谢您的解决方案,但这不会为我在做什么工作,我害怕。 – 2013-05-08 11:19:41

0

可以folllow以下步骤

  1. 将数据转换成Excel格式
  2. 逃生所需的字符\
  3. 再次将其转换成CSV
  4. 然后导入使用程序或任何其他进口工具
0
$data = array(); 
foreach($lines as $value) { 
    $value = explode(";", $value); 

    $first = array_splice($value, 0, 2); 
    unset($value[3]); // <---------------------- point 
    foreach($value as $x){ 

     $first[]=$x; 

     $data[] = $first; 
    } 
} 

foreach($data as $v){ 
    $dump = implode(',', $v); 
    $query="INSERT INTO csv_test2 VALUES ('$dump')"; 
    $init=mysql_query($query); 
} 

//mysql not good pls mysqli 
0

有更好的办法,而不查询中的foreach:

$data = array(); 

foreach ($lines as $value){ 
    // do something 
    $data[] = "('".serialize($value)."')"; 
} 

$query = mysql_query("INSERT INTO csv_test2 VALUES".implode(',', $data).""); 
  • MySQL扩展已被弃用,并且将在未来被删除,请使用库MySQLi或PDO。
0

首先,我建议你打印出查询。我已经做了一些修改您的代码打印查询出来:

$file = "_ss.csv"; 
$lines = file($file); 
$count = count($lines); 
$data = array(); 
$i = 0; 
foreach($lines as $value){ 
    $value = explode(";", $value); 
    $first = array_splice($value, 0, 2); 

    foreach($value as $x){ 

     $row = $first; 
     $row[] = $x; 
     $data[] = implode(',', $row); 
     $dump = implode(',', $data); 
     $query="INSERT INTO csv_test2 VALUES ('$dump')"; 
     echo $query."<br/>"; 
     //$init=mysql_query($query); 

     $i++; 
    //echo $dump."<br/>"; 
    } 
} 

在我的身边,将其打印与此类似:

INSERT INTO csv_test2 VALUES ('a,a1,1') 
  • 如果您的表csv_test2包含类型只有一个字段存储 文本(可以是varchar,char,...),这个查询就可以。
  • 但是,如果它包含更多需要的字段(非空,唯一,...),该查询将不起作用。你需要写:

    INSERT INTO csv_test2(a_field_name)VALUES( 'A,A1,1')

  • 但是,如果你想插入阵列的每个元素对应于每个领域,您的代码不会在这种情况下工作。你需要做这样的查询:

    INSERT INTO csv_test2 VALUES( 'A', 'A1', '1') 所以,你需要做的$dump = implode("','", $data);

+0

它的酷男。我想出了如何去做。我在等待,直到我可以发布答案(如果你是新的,就像自我发布延迟8小时)。 – 2013-05-08 14:35:27

1

确定,因此,这里的我想出了我需要的解决方案。

foreach(explode($lineseparator,$csvcontent) as $value){ 
     $lines++; 
     $value = trim($value," \t"); 
     $value = str_replace("\r","",$value); 
     $value = str_replace("'","\'",$value); 
     $linearray = explode($fieldseparator,$value); 
     $linemysql = implode("','",$linearray); // sitas rdy siuntimui i db 
     $first = array_splice($linearray, 0, 2); 
    foreach($linearray as $x){ 
      $row = $first; 
      $row[] = $x; 
      $data[] = implode("','",$row);  
      } 
} 
foreach ($data as $id) { 
    echo "<pre>"; 
    var_dump($id); 
    echo "</pre>"; 
    $query="INSERT INTO csv_test3 VALUES ('$id')"; 
    $init=mysql_query($query); 
} 

这是基本上需要一个CSV文件,格式化为表示@OP,将其转换并转储一切都变成一个MySQL表的代码的一部分。