2010-03-29 29 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

相關問題