2012-02-03 136 views
0

我想要做的是將SQL查詢導出到.csv文件,以便用戶可以下載它。查詢或多或少是這樣的:在drupal中創建.csv /文本文件

SELECT * FROM {registered} WHERE pending = 'Y' 

我想要查詢的結果將被放在一個.csv文件,我也想在問題中的行與未決=「N」和completed_time更新= NOW()。

我也希望標題包含在頂部。

是否有任何標準的drupal函數應該使用或者我應該簡單地使用file_create_filename函數,然後以普通的php方式創建文件?

我想這樣做是這樣的:不幸的是

// Save query data 
$result = db_query("SELECT * 
        INTO OUTFILE '/tmp/myfile-raw' 
        FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' 
        LINES TERMINATED BY '\n' 
        FROM {plan_tax_red_registered}"); 

if (!$result) { 
    echo 'Failed saving query\n'; 
    return ; 
} 

$file = fopen("/tmp/myfile-raw","rw+"); 

if (!$file) { 
    echo 'Failed opening again\n'; 
    return ; 
} 

// Might be uneccessary but database fields can change 
$columns = db_query("SHOW FIELDS FROM {plan_tax_red_registered}"); 
$list_of_columns = array(); 
while ($res = db_fetch_array($columns)) { 
    $list_of_columns[] = $res['Field']; 
} 

$header = implode(";", $list_of_columns); 

// Get the contents from the raw file 
$old_content = file_get_contents($file); 

// Save result 
$csv_file = fopen("/tmp/result.csv","rw+"); 

if (!$csv_file) { 
    echo "Failed opening csv file\n"; 
    return; 
} 

fwrite($csv_file, $header . "\n" . $old_content); 

fclose($file); 

fclose($csv_file); 

,我無法打開CSV文件:(

我知道我可以簡單地這樣做是爲了顯示文件:

function plan_tax_red_export_to_excel($result, $filename = 'myfile.csv'){ 
    drupal_set_header('Content-Type: text/csv'); 
    drupal_set_header('Content-Disposition: attachment; filename=' . $filename); 

    $count = mysql_num_fields($result); 
    for($i = 0; $i < $count; $i++){ 
    $header[] = mysql_field_name($result, $i); 
    } 
    print implode(';', $header) ."\r\n"; 

    while($row = db_fetch_array($result)){ 
    foreach($row as $value){ 
     $values[] = '"' . str_replace('"', '""', decode_entities(strip_tags($value))) . '"'; 
    } 
    print implode(';', $values) ."\r\n"; 
    unset($values); 
    } 
} 

但是我想更新內容(將is_pending字段設置爲'N'並且completed_time設置爲NOW())。

你有什麼想法?任何幫助表示讚賞:)

親切的問候, 塞繆爾

回答