#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:
У меня есть здесь несколько предложений:
- Рассматривали ли вы возможность использования
SELECT INTO OUTFILE
? Если возможно, это, вероятно, лучший способ сделать это. - Если вы не хотите / не можете использовать
SELECT INTO OUTFILE
, в PHP есть встроенные функции для записи выходных данных CSV, которые обрабатывают такие вещи, как экранирование для вас. Смотрите страницу руководства fputcsv() для получения дополнительной информации. В комментариях пользователя есть несколько примеров, показывающих, как вывести это напрямую. - Убедитесь, что вы выбрали правильные разделители, escape и т.д. при открытии файла в Excel