2014-05-06 98 views
3

我正在向WordPress網站添加一個下載按鈕,該網站將查詢我們的數據庫,並以CSV的形式提供結果。爲什麼fputcsv會產生重複列?

一切正常,除了CSV產生有它返回的每一列重複的列。

我們已經檢查了SQL查詢,它不會有重複。

下面是我們如何生成CSV:

$rows = //Call to SQL query function 
$fp = fopen('php://output', 'w'); 
fputcsv($fp, array_keys($rows)); 

foreach ($rows as $row) { 
    fputcsv($fp, $row); 
} 

$filename = "EventResults.csv"; 
header('Content-Type: text/csv'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=$filename"); 

我們打開SQL返回到一個PHP數組是這樣的:

$sql = "SELECT * FROM TABLE"; 
$statement = $this->db->prepare($sql); 
$statement->execute(); 
return $statement->fetchAll(); 

結果是這樣的:

Lance,Lance,Armstrong,Armstrong,DEX,DEX,70,70,1,1,60,60,SEC,SEC,"10; 20; 30; 40","10; 20; 30; 40" 

當它們應該看起來像這樣:

Lance,Armstrong,DEX,70,1,60,SEC,"10; 20; 30; 40" 

什麼導致重複,我們如何擺脫它們?

+1

也許你'使用一個函數來獲取記錄,該函數將數字鍵和列名作爲鍵返回它們? – Maerlyn

+0

好的,仔細看看$ row後,看起來你是對的。但是,我們不知道如何避免這種情況。有沒有辦法忽略這些值?我們可以刪除它們嗎?阻止他們被放入數組中?你將如何處理這個問題? –

+1

我同意@Maerlyn,在php中查詢數據庫的一些函數/庫可以將結果集作爲關聯數字和數字索引數組,這可能會導致問題。瞭解您如何檢索結果集會很有幫助。 –

回答

6

PDO方法fetchAll()有一個參數fetch_style,其中as documented將返回一個數組和名稱的關聯關鍵字,導致您在遍歷數組時重複。

可以使用PDO的一個它取常數記錄here設置 - 他們都開始PDO::FETCH_並用它來獲得或者關聯數組(PDO::FETCH_ASSOC)或數字陣列(PDO::FETCH_NUM

return $statement->fetchAll(PDO::FETCH_ASSOC); 
+0

在我的情況下,我不得不從mysql_fetch_array()更改爲mysql_fetch_assoc()。 – Ducain

相關問題