скрипт экспорта данных sql, создающий поврежденный файл

#php #sql #excel #csv

#php #sql #excel #csv

Вопрос:

Хорошо, итак, у меня есть следующий скрипт, который будет экспортировать данные из моей базы данных с использованием 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;
  

Комментарии:

1. Не могли бы вы открыть файл в блокноте и показать нам первые пару-три строки, пожалуйста?

2. Попробуйте открыть его в простом текстовом редакторе и посмотрите, что вы получите, nano, gedit, vim…

3. Это результат, состоящий из трех строк: TranID, дата, cat, заголовок, desc, сумма, 1,05-09-11, Техас, lkadsjf, asldkfja; lsdk,20, 2,05-09-11 ,bal,laksdf,;lakjsdf,30, 3,05-09-11 , Обедал вне дома, тестировал, я пошел в wendys, 15,

Ответ №1:

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

 header("Content-type: text/csv");
  

Комментарии:

1. Не могли бы вы открыть файл в текстовом редакторе и показать нам, пожалуйста, первые несколько строк.

2. Это результат, в таблице «trans» есть три строки: TranID, дата, cat, заголовок, desc, сумма, 1,05-09-11, Техас, lkadsjf, asldkfja; lsdk,20, 2,05-09-11 ,bal,laksdf,;lakjsdf,30, 3,05-09-11 , Обедал вне дома, тестировал, я пошел в wendys, 15,

3. не могли бы вы вставить это в вопрос, пожалуйста? Форматирование неверное, поэтому я не могу его прочитать.

Ответ №2:

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

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