[英]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輸出輸出到提供程序的服務器上,而不是將其下載到計算機上?
如果要存儲在服務器上而不是將數據提供給瀏覽器,則需要對您的(否則可以正常工作的)代碼進行一些更改:
header
功能不再需要。 刪除那些。 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.