我正在尝试连接到数据库并获取表的当前状态并将该信息更新为csv文件,使用下面提到的代码段,能够将数据信息获取到csv文件但是无法获取头信息从数据库表到csv文件。
所以我的问题是如何将数据库表格标题信息转换为CSV文件?
$config['database'] = 'sakila';
$config['host'] = 'localhost';
$config['username'] = 'root';
$config['password'] = '';
$d = new PDO('mysql:dbname='.$config['database'].';host='.$config['host'], $config['username'], $config['password']);
$query = "SELECT * FROM actor";
$stmt = $d->prepare($query);
// Execute the statement
$stmt->execute();
var_dump($stmt->fetch(PDO::FETCH_ASSOC));
$data = fopen('file.csv', 'w');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo "Hi";
// Export every row to a file
fputcsv($data, $row);
}
标题信息含义:
Vehicle Build Model
car 2009 Toyota
jeep 2007 Mahindra
因此,此标题信息将为 Vehicle Build Model
任何指导都将受到高度赞赏。
答案 0 :(得分:12)
只需从数组$ row获取密钥:array_keys()。现在你拥有了所有的列名,你可以把它们放在你的csv文件中。
=======编辑=======
<?php
$header = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
if(empty($header)){ // do it only once!
$header = array_keys($row); // get the columnnames
fputcsv($data, $header); // put them in csv
}
echo "Hi";
// Export every row to a file
fputcsv($data, $row);
}
?>
答案 1 :(得分:2)
使用SHOW COLUMNS FROM将为您提供列名称。然后,您可以用它们写下CSV的第一行:
// Do this before adding the rows from the database
$query = "SHOW COLUMNS FROM some_table";
$stmt = $d->prepare($query);
$stmt->execute();
$columns = '';
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$columns .= $row['Field'] . ',';
}
$columns = substr($columns, 0, -1);
fputcsv($data, $columns);
答案 2 :(得分:1)
使用mysqldump:
mysqldump -u user -p --fields-terminated-by=',' --tab=/tmp mydatabase mytable
上面的命令将在/ tmp中创建2个文件。 mytable.sql和mytable.txt。 sql文件将包含表创建模式,txt文件将包含mytable表的记录,其中的字段用逗号分隔。
答案 3 :(得分:0)
您已经在PDO::FETCH_ASSOC中拥有它:返回按结果集中返回的列名索引的数组
编辑: 获取和写入列名称的一种方法是(将它放在你的lopp之前)
fputcsv($data, array_keys($stmt->fetch(PDO::FETCH_ASSOC)));
特别阅读php arrays和关联数组以及数组上的函数(例如array_keys)。特定问题的答案不能取代对数组等基本概念的理解。