Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выгрузка данных из MySQL в csv
 
 автор: ols   (31.10.2008 в 17:52)   письмо автору
 
 

Можно ли средствами php из MySQL выгрузить данные в csv?

  Ответить  
 
 автор: ols   (31.10.2008 в 17:58)   письмо автору
 
   для: ols   (31.10.2008 в 17:52)
 

Интересует сам процес записи данных в csv формат

  Ответить  
 
 автор: ddhvvn   (31.10.2008 в 18:19)   письмо автору
 
   для: ols   (31.10.2008 в 17:58)
 

А в чем трудности то?


<?php
...
$get_fileds mysql_query('SELECT * FROM table_name');
$f fopen('file.csv''w');
while (
$ar mysql_fetch_row($get_fields))
  
fputcsv($f$ar);
fclose($f);
?>

  Ответить  
 
 автор: ols   (03.11.2008 в 15:57)   письмо автору
 
   для: ddhvvn   (31.10.2008 в 18:19)
 

Ваш пример выдал такую ошибку
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in s:\home\socbel\www\admin\csv.php on line 5

  Ответить  
 
 автор: Trianon   (03.11.2008 в 16:13)   письмо автору
 
   для: ols   (03.11.2008 в 15:57)
 

Вас же интересовал "сам процесс записи в csv формат" ?

У меня скрипт работает.

  Ответить  
 
 автор: ols   (03.11.2008 в 16:44)   письмо автору
 
   для: Trianon   (03.11.2008 в 16:13)
 

>Вас же интересовал "сам процесс записи в csv формат" ?
Вот именно. Скрипт создает файл, но ничего не записываети И еще предупреждение выдает.

Да даже взять пример с документации
<?php

$list 
= array (
    
'aaa,bbb,ccc,dddd',
    
'123,456,789',
    
'"aaa","bbb"'
);

$fp fopen('file.csv''w');

foreach (
$list as $line) {
    
fputcsv($fpsplit(','$line));
}

fclose($fp);
?>

Опять же только создается файл, но ничего не записывается, а на экран выводится фатальная ошибка - Fatal error: Call to undefined function: fputcsv() in s:\home\socbel\www\admin\csv.php on line 12

  Ответить  
 
 автор: ols   (03.11.2008 в 18:12)   письмо автору
 
   для: ols   (03.11.2008 в 16:44)
 

Подскажите в чем проблема, уже целый час нему разобараться.

  Ответить  
 
 автор: ddhvvn   (03.11.2008 в 18:24)   письмо автору
 
   для: ols   (03.11.2008 в 18:12)
 

-------------

  Ответить  
 
 автор: ddhvvn   (03.11.2008 в 18:24)   письмо автору
 
   для: ols   (03.11.2008 в 18:12)
 

Неужели так трудно, если не знаете смысла, перевести текст ошибки?
Этой функции у Вас нет! Она доступна с версии 5.1.0RC1

  Ответить  
 
 автор: ols   (03.11.2008 в 19:14)   письмо автору
 
   для: ddhvvn   (03.11.2008 в 18:24)
 

Ага, спасибо разобрался, поставил себе пятую версию, уж давно пора :)

Еще одна беда. Всю инфу записывает в один столбец, а нужно чтобы в каждый.
Я попыталя сделать следущим образом:

<?php
include "config.php";
$sql mysql_query("SELECT * FROM punkt");
$f fopen('file.csv''w');
if(
$sql)
{

    while(
$data fgetcsv($f1000";"))
     {
         
fputcsv($f$data);
        
fclose($f);
     }
}
else echo 
mysql_error();
?>


Но совсем перестал записывать в файл. почему так?

  Ответить  
 
 автор: ddhvvn   (03.11.2008 в 19:51)   письмо автору
 
   для: ols   (03.11.2008 в 19:14)
 

Ужас!
Вам что нужно? что, куда и откуда записать?
Вы что-то читаете, потом тут же записываете и закрываете %)

Да и, режим "w" очищает файл.

  Ответить  
 
 автор: ols   (03.11.2008 в 19:58)   письмо автору
 
   для: ddhvvn   (03.11.2008 в 19:51)
 

Я хочу из таблицы punkt, выбрать все записи и импортировать их в csv файл
Для наглядности вот струткура таблицы punkt


CREATE TABLE `punkt` (
  `id` int(11) NOT NULL auto_increment,
  `login` tinytext NOT NULL,
  `pswrd` tinytext NOT NULL,
  `description` tinytext NOT NULL,
  `tel` varchar(8) NOT NULL default '',
  `street` varchar(30) NOT NULL default '',
  PRIMARY KEY  (`id`)



>Да и, режим "w" очищает файл.
Ну я так и хочу, что если данный файл существует и в нем есть записи, то мне нужно сначала очистить их, а потом уже записать новые обновленные данные

  Ответить  
 
 автор: ddhvvn   (03.11.2008 в 20:58)   письмо автору
 
   для: ols   (03.11.2008 в 19:58)
 

<?php 
include "config.php"
$sql mysql_query("SELECT * FROM punkt"); 
$f fopen('file.csv''w'); 
if(
$sql


    while(
$data mysql_fetch_row($sql)) 
     { 
         
fputcsv($f$data); 
     } 

else echo 
mysql_error(); 
fclose($f);
?> 

  Ответить  
 
 автор: Trianon   (03.11.2008 в 21:17)   письмо автору
 
   для: ddhvvn   (03.11.2008 в 20:58)
 

Разделитель неадекватный неаутентичный.
Впрочем, корм не в коня, так что всё равно...

  Ответить  
 
 автор: ols   (04.11.2008 в 11:04)   письмо автору
 
   для: Trianon   (03.11.2008 в 21:17)
 

Вы правы, записывает все в первый столбец, а я хочу каждый столбец массива $data записывать в отдельный ряд по порядку.
Вообщем я попробовал сделать так
<?php
include "config.php";
$sql mysql_query("SELECT * FROM punkt");
$f fopen('file.csv''w');
if(
$sql)
{

    while(
$data mysql_fetch_row($sql))
     {
         
fputcsv($fsplit(';',$data[0]));
     }
}
else echo 
mysql_error();
fclose($f);
?>

Но опять же, запишет только нулевой элемент, а нужно все элементы.
Если делать так
fputcsv($f, split(';',$data))
, записывает Array
Trianon, помогите!

  Ответить  
 
 автор: Trianon   (04.11.2008 в 11:35)   письмо автору
 
   для: ols   (04.11.2008 в 11:04)
 

Вы описание функции fputcsv прочли?

  Ответить  
 
 автор: ols   (04.11.2008 в 12:00)   письмо автору
 
   для: Trianon   (04.11.2008 в 11:35)
 

>Вы описание функции fputcsv прочли?
Да я уже несклолько раз документацию прочитал. Только немогу врубиться.

  Ответить  
 
 автор: ddhvvn   (04.11.2008 в 13:22)   письмо автору
 
   для: ols   (04.11.2008 в 12:00)
 

Вы че тваорите?
Че Вам в моем варианте не нравится? Вы его хоть запускали?

  Ответить  
 
 автор: ols   (04.11.2008 в 13:48)   письмо автору
 
   для: ddhvvn   (04.11.2008 в 13:22)
 

>Вы че тваорите?
>Че Вам в моем варианте не нравится? Вы его хоть запускали?
Да, запускал, но он в csv - файле записывает все в первую колонку.
Вот столбцы таблицы - id | login | pswrd | description | tel | street
Все значения этих столбцов он записывает в один первый столбец csv-файла.
А нужно чтобы id в первый столбец csv - файла, login во второй и.т.д.

  Ответить  
 
 автор: Trianon   (04.11.2008 в 13:56)   письмо автору
 
   для: ddhvvn   (04.11.2008 в 13:22)
 

>Че Вам в моем варианте не нравится?
Я ж сказал - неаутентичный разделитель полей.

  Ответить  
 
 автор: ddhvvn   (04.11.2008 в 14:16)   письмо автору
 
   для: Trianon   (04.11.2008 в 13:56)
 

Терь я не понял =)!
Что это значит?
Тут [у меня] стандартный разделитель! И с ним все работает.

  Ответить  
 
 автор: Trianon   (04.11.2008 в 14:17)   письмо автору
 
   для: ddhvvn   (04.11.2008 в 14:16)
 

В русскоязычном пространстве разделитель отличен от стандартного. С точки зрения Windows.

  Ответить  
 
 автор: ddhvvn   (04.11.2008 в 14:20)   письмо автору
 
   для: Trianon   (04.11.2008 в 14:17)
 

Что значит "отличен"?
В смысле отличен в самом csv ("по определению") или в функции?

  Ответить  
 
 автор: Trianon   (04.11.2008 в 14:21)   письмо автору
 
   для: ddhvvn   (04.11.2008 в 14:20)
 

В экселе. Точнее в региональных настройках Windows.

  Ответить  
 
 автор: ddhvvn   (04.11.2008 в 14:25)   письмо автору
 
   для: Trianon   (04.11.2008 в 14:21)
 

%)
Вы меня вообще запутали! Причем тут эксель? )
Тут я вижу только файл csv и базу mysql...

  Ответить  
 
 автор: Trianon   (04.11.2008 в 13:57)   письмо автору
 
   для: ols   (04.11.2008 в 12:00)
 

Так спрашивайте, что непонятно. В документации.

  Ответить  
 
 автор: ols   (04.11.2008 в 14:10)   письмо автору
 
   для: Trianon   (04.11.2008 в 13:57)
 

>Так спрашивайте, что непонятно. В документации.
Из документации

Дополнительный параметр delimiter устанавливает разделитель полей (только один символ). По умолчанию это запятая: ,.

Исходя из этого я и сделал в цикле так

while($data = mysql_fetch_row($sql)) 
     { 
         fputcsv($f, split(';',$data[0])); 
     }

Но он не совсем правильный. Нужно все элементы масива $data записать в файл, причем значения каждого элемента в разный столбец. А в примере тов. ddhvvn из базы все записывается в первый столбец csv-файла

  Ответить  
 
 автор: ddhvvn   (04.11.2008 в 14:18)   письмо автору
 
   для: ols   (04.11.2008 в 14:10)
 

Во-первых: Вы знаете для чгео нужная функция split? Если не знаете, че суете то?
Во-вторых все работает! Первый столбец в первый, второй во второй и т.д.
Могу показать то, что получается у меня! Моим же скриптом!

  Ответить  
 
 автор: ols   (04.11.2008 в 14:19)   письмо автору
 
   для: ols   (04.11.2008 в 14:10)
 

О все разобрался

<?php
include "config.php";
$sql mysql_query("SELECT * FROM punkt");
$f fopen('file.csv''w');
if(
$sql)
{

    while(
$data mysql_fetch_row($sql))
     {
         
fputcsv($f$data';');
     }
}
else echo 
mysql_error();
fclose($f);
?>

  Ответить  
 
 автор: ddhvvn   (04.11.2008 в 14:21)   письмо автору
 
   для: ols   (04.11.2008 в 14:19)
 

Т.е. хотите сказать, что со стандартным разделителем (запятой), у Вас не работает?

  Ответить  
 
 автор: ols   (04.11.2008 в 14:25)   письмо автору
 
   для: ddhvvn   (04.11.2008 в 14:21)
 

Ну да у меня русский эксель стоит, просто по умолчанию параметр delimiter ставит запятую, а в русскоязычном екселе разделитель точка с запятой. Хотя не знаю как в остальных.

  Ответить  
 
 автор: ddhvvn   (04.11.2008 в 14:26)   письмо автору
 
   для: ols   (04.11.2008 в 14:25)
 

Еще один! ПРИЧЕМ эксель ТУТ? )))))))))))))

  Ответить  
 
 автор: ols   (04.11.2008 в 14:30)   письмо автору
 
   для: ddhvvn   (04.11.2008 в 14:26)
 

>Еще один! ПРИЧЕМ эксель ТУТ? )))))))))))))
Потому что сформированный файл открываю екселем )))

  Ответить  
 
 автор: ddhvvn   (04.11.2008 в 14:33)   письмо автору
 
   для: ols   (04.11.2008 в 14:30)
 

тьфу ты блин!
Трианон и Вы про это???

мне эт даже в голову не пришло!
я смотрю все "такое" листером обычно!
так а все равно, что не видно что ли, что все разделено запятыми? Вам же не в экселе с ним работать?!..

  Ответить  
 
 автор: ols   (04.11.2008 в 14:39)   письмо автору
 
   для: ddhvvn   (04.11.2008 в 14:33)
 

>так а все равно, что не видно что ли, что все разделено запятыми? Вам же не в экселе с ним работать?!..
В экселе. Лучше же конечно сразу в xls формат, но в php нет стандартных функций, поэтому потом вручную опять же в екселе пересохранять в .xls формат

  Ответить  
 
 автор: Trianon   (04.11.2008 в 14:20)   письмо автору
 
   для: ols   (04.11.2008 в 14:10)
 

Как, по Вашему, это split(';',$data[0]) должно работать?
Почему просто не указать правильный разделитель, уж коль скоро функция позволяет его указать?

  Ответить  
 
 автор: ols   (04.11.2008 в 14:29)   письмо автору
 
   для: Trianon   (04.11.2008 в 14:20)
 

>Почему просто не указать правильный разделитель, уж коль скоро функция позволяет его указать?
Я просто первый раз невнимательно прочитал документацию ))
Спасибо вам обоим))))))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования