Скрипт экспорта данных SQL, создание поврежденного файла - PullRequest
1 голос
/ 09 мая 2011

Хорошо, у меня есть следующий скрипт, который будет экспортировать данные из моей базы данных с помощью php.Все работает нормально, за исключением случаев, когда я пытаюсь открыть файл в Excel, я получаю «файл поврежден».Я использовал этот скрипт раньше, и я не могу понять, почему он не работает.Это может быть простое решение, которое я не вижу.Заранее спасибо!

$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
mysql_select_db($db) or die("Can not connect.");

$result = mysql_query("SHOW COLUMNS FROM trans",$link);
$i = 0;
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= $row['Field'].",";
$i++;
  }
}
$csv_output .= "\n";

$values = mysql_query("SELECT * FROM trans",$link);
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= $rowr[$j].",";
  }
$csv_output .= "\n";
}

$filename = date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
print $csv_output;

exit;

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Я думаю, что Тип контента неверен. Попробуйте использовать это вместо:

header("Content-type: text/csv");
0 голосов
/ 10 мая 2011

У меня есть несколько предложений:

  1. Рассматривали ли вы возможность использования SELECT INTO OUTFILE?Если возможно, это, вероятно, лучший способ сделать это.
  2. Если вы не хотите / не можете использовать SELECT INTO OUTFILE, PHP имеет встроенные функции для записи CSV-вывода, которые обрабатывают такие вещи, как экранирование длявы.Для получения дополнительной информации см. Справочную страницу fputcsv () .В комментариях пользователей есть несколько примеров, показывающих, как выводить его напрямую.
  3. Убедитесь, что вы выбрали правильные разделители, экранирование и т. Д. При открытии файла в Excel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...