2

我需要创建一个从 mySQL DB 获取数据的 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);
}
4

1 回答 1

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);

} 
于 2013-06-06T11:26:54.843 回答