2010-03-29 14 views
3

我想连接到数据库并获取表的当前状态并将该信息更新到csv文件中,使用下面提到的一段代码可以获取数据信息到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 

SO报头信息,这将是汽车创建模型

任何指导,将不胜感激。

回答

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); 
} 
?> 
+0

如果你能解释一下这个细节,我现在还不明白,请多多谅解。 – Rachel 2010-03-29 15:51:00

+0

查看编辑答案 – 2010-03-29 15:57:27

+0

@Frank:它如何知道它是否是一个标题? – Rachel 2010-03-29 16:00:06

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

你能解释一下,我怎样才能写CSV文件的第一行,现在它不会被更新到CSV文件? – Rachel 2010-03-29 15:46:41

+0

编辑我的答案,以更好地展示这是如何完成的。 – 2010-03-29 15:55:20

+0

是的。我正在通过它,感谢您的详细解释。 – Rachel 2010-03-29 15:56:30

1

使用mysqldump

mysqldump -u user -p --fields-terminated-by=',' --tab=/tmp mydatabase mytable 

上面的命令将在/ tmp目录2个文件。 mytable.sql和mytable.txt。 sql文件将包含表创建模式,并且txt文件将包含mytable表的记录以及由逗号分隔的字段。

+0

获取信息,它只创建.sql文件而不是.txt文件,我是否错过了这里的一些东西。 – Rachel 2010-03-29 15:50:19

0

你已经拥有它的PDO::FETCH_ASSOC:在你的结果返回返回按列名索引的数组设置

编辑: 一种方法来获取和写专栏的名称是(把你的同时LOPP之前)

fputcsv($data, array_keys($stmt->fetch(PDO::FETCH_ASSOC))); 

在阅读php arrays和关联数组特别是在数组上的函数(比如array_keys)。特定问题的答案不能代替对数组等基本概念的理解。

+0

与我如何获取该标题信息相比,我不确定如何使用数据库标题信息。 – Rachel 2010-03-29 15:56:01

相关问题