如何使用数据库表头更新csv列名

时间:2012-12-14 07:30:29

标签: php mysql import

我过去几天都面临这个问题而现在感到沮丧,因为我必须这样做。

我需要使用数据库表头更新我的CSV文件列名。我的数据库表字段与CSV文件不同。现在的问题是,首先我想用数据库表头更新CSV文件的列名,然后用字段映射将其数据导入数据库。

请帮助我,我不知道如何解决这个问题。

这是我的PHP代码:

$file      = $_POST['fileName'];
$filename  = "../files/" . $file;
$list      = $_POST['str'];
$array_imp = implode(',', $list);
$array_exp = explode(',', $array_imp);
$fp        = fopen("../files/" . $file, "w");
$num       = count($fp);

for ($c = 0; $c < $num; $c++) {
    if ($fp[c] !== '') {
        fputcsv($fp, $array_exp);
    }
}

fclose($fp);


require_once("../csv/DataSource.php");
$path = "../files/test_mysql.csv";
$dbtable = $ext[0];

$csv = new File_CSV_DataSource;
        $csv->load($path);
        $csvData = $csv->connect();
        $res=''; 
        foreach($csvData  as $key)
        {  print_r($key[1]);
            $myKey ='';
            $myVal='';
            foreach($key as $k=>$v)
            { 
                $myKey .=$k.',';
                $myVal .="'".$v."',";

            }
            $myKey = substr($myKey, 0, -1);
            $myVal = substr($myVal, 0, -1); 
            $query="insert into tablename($myKey)values($myVal)";
            $res=  mysql_query($query);

2 个答案:

答案 0 :(得分:1)

您有一个现有文件,其中第一行需要更换。

这一概述如下:

一些小解释(以及其他问题未涉及的一些提示)。大多数情况下,使用两个文件操作更容易:

  1. 现有文件(将从中复制)
  2. 暂时用于写入的新文件。
  3. 完成后,旧文件将被删除,新文件将被重命名为旧文件的名称。

    您的代码无效,因为您已将新的第一行写入文件。当你关闭它时,这将切掉文件的其余部分。

    你也看起来误导了一些基本的PHP功能,例如:在文件句柄上使用count无法帮助您获取行数。它只会返回1.

    以下是您需要做的一步一步:

    1. 打开要读取的现有文件。只需读取它的第一行就可以推进文件指针(fgets
    2. 打开要写入的新文件。将新标题写入其中(正如您已经成功完成的那样)。
    3. 将第一个文件中的所有剩余数据复制到新的第二个文件中。 PHP有一个函数,它被称为stream_copy_to_stream
    4. 关闭这两个文件。

        

      现在检查新文件是否是您要查找的内容。当这一切都有效时,您需要添加更多步骤:

    5. 将原始文件重命名为新名称。这可以通过rename完成。

    6. 将您已写入的文件重命名为原始文件名。
    7. 如果需要,您可以删除在5中重命名的文件。 - 但仅限于您不再需要它。

      就是这样。我希望这是有帮助的。 PHP手册包含所提及和链接的所有功能的示例代码。祝好运。如果您不了解自己的代码,请先使用手册阅读相关内容。这减少了可能引入错误的地方。

答案 1 :(得分:0)

如果您要设置插入表格标题,那么您就在那里。 听起来像你需要在标题之后追加数据:

$data = $headers;

if($fp[c]!=='')
{ $data .= fputcsv($fp, $array_exp); }

注意点'。'在if语句中等于'='之前。这将在标题后添加空白$fp[c]值。