3

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

我需要用数据库表头更新我的 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);
4

2 回答 2

1

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

这里一般概述了这一点:

一些小解释(以及其他问题未涵盖的一些提示)。通常在这里使用两个文件更容易操作:

  1. 现有文件(要从中复制)
  2. 临时用于写入的新文件。

完成后,旧文件将被删除,新文件将重命名为旧文件的名称。

您的代码不起作用,因为您已经将新的第一行写入文件。当您关闭它时,这将切断文件的其余部分。

此外,您看起来对一些基本的 PHP 功能有误解,例如count在文件句柄上使用并不能帮助您获得行数。它只会返回 1。

这是您需要做的一步一步:

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

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

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

  6. 将您写入的文件重命名为原始文件名。

如果需要,您可以删除在 5 中重命名的文件。 - 但前提是您不再需要它。

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

于 2012-12-14T17:01:28.293 回答
0

如果您设法插入表格标题,那么您就成功了一半。在我看来,您需要在标题之后附加数据,例如:

$data = $headers;

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

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

于 2012-12-14T12:27:00.653 回答