我需要创建一个从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);
}
答案 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);
}