从csv文件中读取第一行并根据它创建表(csv文件字段)

时间:2013-12-31 03:14:04

标签: php mysql csv

从csv文件中读取第一行并根据它在mysql中自动创建表(csv文件字段)。寻找PHP脚本?  我试过这个

 <?php

$arr = array(array(),array());
$num = 0;
$row = 0;
$handle = fopen("./contacts.csv", "r");


while($data = fgetcsv($handle,1000,",")){   
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
            $arr[$row][$c] = $data[$c];
    }
    $row++;
}


$con = mysql_connect('localhost','root','');
mysql_select_db("excel_database",$con);

for($i=1; $i<$row; $i++){
$sql = "INSERT INTO contacts VALUES ('".$arr[$i][0]."','".$arr[$i][1]."','".$arr[$i][2]."','".$arr[$i][3]."','".$arr[$i][4]."','".$arr[$i][5]."')";
mysql_query($sql,$con);
}

?>

5 个答案:

答案 0 :(得分:4)

稍微修改你的脚本,这应该可以解决问题并根据csv标题行创建表:

    $sql[] = array();
    $handle = fopen($file, "r");

    $header = fgetcsv($handle,1000,",");
    if($header){
        $header_sql = array();
        foreach($header as $h){
            $header_sql[] = '`'.$h.'` VARCHAR(255)';
        }
        $sql[] = 'CREATE TABLE `imported_csv` ('.implode(',',$header_sql).')';

        while($data = fgetcsv($handle,1000,",")){   
            $sql[] = "INSERT INTO imported_csv VALUES ('".implode("','",$data)."')";
        }
    }        

    $con = mysql_connect('localhost','root','');
    mysql_select_db("excel_database",$con);
    foreach($sql as $s){
        mysql_query($s,$con);
    }

答案 1 :(得分:3)

这是一个单一功能,为您提供一个数组:fgetcsv请参阅该页面上的示例#1以获取基本脚本。

这个表只是循环内容......

啊哈,我终于在mysql中根据它自动解析了表格并理解了。抱歉。 fgetcsv将返回一个数组;只需使用该数组来创建您的sql命令。例如'...values (' . implode(',', $results_of_fgetcsv) . ')...'

答案 2 :(得分:3)

这是你问题的一半。

<?php
    $row = 1;
    if (($handle = fopen("ab.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            echo "<p> $num fields in line $row: <br /></p>\n";
            $row++;
            for ($c=0; $c < $num; $c++) {
                echo $data[$c] . "<br />\n";

            }
        }

        fclose($handle);
    }
    ?>

答案 3 :(得分:2)

如果要在html中可视化表数据,可以使用PHP创建表,将csv中的数据作为标题读取第一行。我使用这个功能你可以试试!

function build_table($source){
$data = array();
$file = fopen($source, 'r');
while (($result = fgetcsv($file,0,";")) !== false){$data[] = $result;}
fclose($file);


//Now process the data and create table
$data_rows=@count($data[0]); //from the first row get the header name
$colum_trail="";
//Create the header part
for($i=0; $i<$data_rows;$i++){
$cell=$data[0][$i]; //each header
$colum_trail.="<th>$cell</th>";    
}

////Create the table body contents     
$table_cells="";

for($i=1; $i<count($data);$i++){
$table_cells.="<tr>";       
$cell=$data[$i];

foreach($cell as $cell_value){
$cell_v=$cell_value;
$table_cells.="<td>$cell_v</td>";
}
$table_cells.="</tr>";
}

$table="<table><tr>$colum_trail</tr>$table_cells</table>";
echo "<style>td {border-bottom: 2px solid black;}</style>";
echo $table;
}

然后您只需要在该代码之后调用该函数:

build_table("source.csv");  //then call the file you want to create table

答案 4 :(得分:1)

array_shift(file('filename.csv'))将为您提供文档filename.csv

的第一行