2013-05-08 27 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表的代碼的一部分。