PHP创建一个复杂的CSV文件

时间:2013-06-06 10:15:34

标签: php csv

我需要创建一个从mySQL数据库获取数据的CSV文件。

事实是我希望CSV tp被标记为更正,而不仅仅是写这样的数据:

id,name,url
1,thisismyname,thisismyurl

我需要CSV文件看起来排序良好,并且每个数据都插入到相对列中。

另外,我将在下面添加的功能中,我只能从数据库中获取数据,并将其原样写入CSV文件。但我需要使用数据并以这种方式标记CSV:

Campaign Name:
Name of the campaign

Campaign Url:
Url of the campaign

Tot visits:
Tot of visits

Tot unique visits:
Tot of unique visits

id     name         url
1      thisname     this url
2      thisname     this url
3      thisname     this url
4      thisname     this url
5      thisname     this url

这是我到目前为止的PHP代码。我需要了解如何使用PHP实现CSV的正确结构,并以我想要的方式添加行...

感谢您的帮助!

function genCSV($filename, $attachment = true, $headers = true) {
    // send response headers to the browser
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment;filename=' . $filename);
    $fp = fopen('php://output', 'w');

    $query = "SELECT * FROM campaigns";
    $result = mysql_query($query) or die(mysql_error());

    if ($headers) {
        // output header row (if at least one row exists)
        $row = mysql_fetch_assoc($result);
        if ($row) {
            fputcsv($fp, array_keys($row));
            // reset pointer back to beginning
            mysql_data_seek($result, 0);
        }
    }

    while ($row = mysql_fetch_assoc($result)) {
        fputcsv($fp, $row);
    }

    fclose($fp);
}

1 个答案:

答案 0 :(得分:2)

这是一个比@Tom Regner提出的解决方案更不优雅的解决方案。

我需要备份某些数据库表(所有具有给定前缀的表)而不是其他数据库表。此方法虽然有点慢,但允许您准确选择哪些表以及这些表中的哪些列被复制。最初编写它是为了允许每个数据在输入文件之前进行AES加密,但还有其他用途。如此处所写,结果是一个CSV文件,第一行包含表的列列表,其余行包含CSV格式的数据。如果你愿意的话,它可以适应将任何sql的结果输出到CSV中。

显然:mysqlidb = mysqli数据库资源,backups / =目录,用于放入已完成的文件。

FWIIW,这是代码:

$sql="SHOW TABLES LIKE 'yourtable%'";
$result = $mysqlidb->query($sql);
$tableresult=$mysqlidb->query($sql);
while($tables=$tableresult->fetch_assoc())
{
$keys=array_keys($tables);
$tablename=$tables[$keys[0]];
echo "Writing $tablename <BR>";
$file=fopen("backups/$tablename.enc","w");
$cols=array();
$sql="SHOW COLUMNS FROM $tablename";
$result=$mysqlidb->query($sql);
while($row=$result->fetch_assoc())
    {
    $cols[]=$row['Field'];
    }
fputcsv($file,$cols);
$sql="SELECT * FROM $tablename";
$result=$mysqlidb->query($sql);
while($row=$result->fetch_assoc())
    {
    fputcsv($file,$row);
    }
fclose($file);

}