簡體   English   中英

用php將mysql表導出到csv(不選擇到outfile中)

[英]export mysql table to csv with php (no select into outfile)

我正在嘗試將MySQL表導出到CSV文件。 我的代碼工作正常:

$result = mysql_query('SELECT * FROM `TABLE`'); 
if (!$result) die('Couldn\'t fetch records'); 
$num_fields = mysql_num_fields($result); 
$headers = array(); 
for ($i = 0; $i < $num_fields; $i++) 
{     
$headers[] = mysql_field_name($result , $i); 
} 
$fp = fopen('php://output', 'w'); 
if ($fp && $result) 
{     
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="export.csv"');
header('Pragma: no-cache');    
header('Expires: 0');
fputcsv($fp, $headers); 
while ($row = mysql_fetch_row($result)) 
{
fputcsv($fp, array_values($row)); 
}
die; 
}

但是,我想將csv文件自動上傳到我的Web主機服務器,而不是下載到我的計算機。
我不能使用“ SELECT ... INTO OUTFILE”查詢,因為我的提供者不想給我FILE特權。
以任何方式我可以使用php將csv輸出輸出到提供程序的服務器上,而不是將其下載到計算機上?

如果要存儲在服務器上而不是將數據提供給瀏覽器,則需要對您的(否則可以正常工作的)代碼進行一些更改:

  1. header功能不再需要。 刪除那些。
  2. 您不想再輸出到php://output ,而是使用要將CSV數據存儲到的文件的路徑。

就是這樣。

您將一些過時的Mysql客戶端庫用作PHP 5.5代碼的示例代碼:

$file_name = '/path/to/file/on/server.csv';
$sql       = 'SELECT * FROM `TABLE`';

$query = function ($statement) {
    if (!$result = mysql_query($statement)) throw new RuntimeException(
        sprintf('Statement %s failed: #%s %s', var_export($statement, true), mysql_errno(), mysql_error())
    );
    return $result;
};

$names = function ($result) {
    for ($names = [], $i = mysql_num_fields($result); $i; $i--)
        $names[] = mysql_field_name($result, $i);
    return $names;
};

$rows = function($result) {while ($row = mysql_fetch_row($result)) yield $row;};

$result = $query($sql);

$lines = new AppendIterator();
$lines->append(new ArrayIterator([$names($result)]));
$lines->append($rows($result));

$csv = new SplFileObject($file_name, 'w');
foreach ($lines as $fields) {
    $csv->fputcsv($fields);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM