Различия

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


Предыдущая версия
csv [2024/02/12 23:01] (текущий) darkfire
Строка 1: Строка 1:
 +====== XLSX, CSV в MySQL с помощью PHP ======
  
 +{{htmlmetatags>
 +metatag-description=(Импорт данных из XLSX, CSV при помощи PHP в MySQL)
 +}}
 +
 +**CSV** (Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter). Под CSV, как правило, понимают набор значений, разделенных какими угодно разделителями, в какой угодно кодировке с какими угодно окончаниями строк.
 +
 +CSV и [[PHP]].
 +  * [[http://php.net/manual/ru/function.fgetcsv.php|fgetcsv]] — Читает строку из файла и производит разбор данных CSV. Эта функция принимает во внимание настройки локали. К примеру, если LANG установлена в en_US.UTF-8, то файлы в однобайтовой кодировке будут неправильно прочитаны этой функцией.
 +===== Примеры импорта экспорта CSV =====
 +  * [[http://parsing-and-i.blogspot.com/2010/05/csv-mysql.html|Запись данных из CSV- файлов в базу MySQL]]
 +  * [[Как в PostgreSQL сохранить данные в формате csv]]?
 +  * [[MySQL]]. Источник: [[http://blog.nagaychenko.com/2010/02/13/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0-csv-mysql-%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B0%D0%BC%D0%B8/|Создание csv файла средствами MySql]]<file sql>
 +SELECT * INTO OUTFILE '/tmp/users.csv'
 +FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\'
 +LINES STARTING BY '' TERMINATED BY '\r\n'
 +FROM user;
 +</file>
 +  * При помощи PHP создание csv файла из данных таблицы MySQL<file php>
 +$select = "SELECT * FROM table_name";
 +
 +$export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( ) );
 +
 +$fields = mysql_num_fields ( $export );
 +
 +for ( $i = 0; $i < $fields; $i++ )
 +{
 +    $header .= mysql_field_name( $export , $i ) . "\t";
 +}
 +
 +while( $row = mysql_fetch_row( $export ) )
 +{
 +    $line = '';
 +    foreach( $row as $value )
 +    {                                            
 +        if ( ( !isset( $value ) ) || ( $value == "" ) )
 +        {
 +            $value = "\t";
 +        }
 +        else
 +        {
 +            $value = str_replace( '"' , '""' , $value );
 +            $value = '"' . $value . '"' . "\t";
 +        }
 +        $line .= $value;
 +    }
 +    $data .= trim( $line ) . "\n";
 +}
 +$data = str_replace( "\r" , "" , $data );
 +
 +if ( $data == "" )
 +{
 +    $data = "\n(0) Records Found!\n";                        
 +}
 +
 +header("Content-type: application/octet-stream");
 +header("Content-Disposition: attachment; filename=your_desired_name.xls");
 +header("Pragma: no-cache");
 +header("Expires: 0");
 +print "$header\n$data";
 +</file>
 +
 +===== Формат файла .xlsx =====
 +Формат файла **.xlsx** основан на Open XML. Для уменьшения размера файла используется сжатие [[ZIP]].
 + 
 +Файлы xlsx совместимы и с более старыми версиями Microsoft Office - 2000, XP, 2003. Но для этого необходимо установить специальный компонент.
 +
 +<note warning>Поскольку файл XLSX содержит несколько файлов, его нельзя импортировать непосредственно в MySQL. Поэтому рекомендуется преобразовать файл XLSX в CSV, а затем импортировать его в базу данных.</note>
 +===== Пример импорта xlsx в MySQL =====
 +
 +Используется PHP класс [[https://github.com/shuchkin/simplexlsx|SimpleXLSX class 0.7.13 (Official)]]
 +
 +  - скачиваем класс SimpleXLSX<file bash>
 +git clone https://github.com/shuchkin/simplexlsx.git
 +</file>
 +  - Код преобразующий xlsx в csv<file php>
 +<?php
 +
 +include_once('simplexlsx.class.php');
 +
 +$file_out='output_file.csv';
 +
 +$xlsx = SimpleXLSX::parse('input_file.xlsx');
 +$fp=fopen($file_out,'w');
 +foreach( $xlsx->rows() as $fields ) {
 +fputcsv($fp, $fields);
 +}
 +fclose($fp);
 +</file>
 +  - Преобразуем файл XLSX в [[massivy_php|PHP массив]] и импортировать его в базу данных, используя расширения [[PDO]]. Предварительно очищаем таблицу и после загрузки удаляем строку с названиями столбцов.<file php>
 +
 +try {
 +    $etdb = new PDO('mysql:host=' .
 +            ET_MYSQL_HOST .
 +            ';dbname=' . ET_MYSQL_DATABASE, ET_MYSQL_USER, ET_MYSQL_PASSWORD);
 +} catch (PDOException $e) {
 +    print "Error!: " . $e->getMessage() . "<br />";
 +}
 +// Clear Table
 +$etdb->query('TRUNCATE TABLE df_garne;');
 +
 +$xlsx = SimpleXLSX::parse('garne_prices_bags.xlsx');
 +
 +// Insert rows from xlsx
 +$stmt = $etdb->prepare( "INSERT INTO df_garne
 +(sku, name, color, price_opt, price_retail, size, type, category, brand, url_to_shop, consist,
 +description, fotos, sex)
 +VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
 +    $stmt->bindParam( 1, $sku);
 +    $stmt->bindParam( 2, $name);
 +    $stmt->bindParam( 3, $color);
 +    $stmt->bindParam( 4, $price_opt);
 +    $stmt->bindParam( 5, $price_retail);
 +    $stmt->bindParam( 6, $size);
 +    $stmt->bindParam( 7, $type);
 +    $stmt->bindParam( 8, $category);
 +    $stmt->bindParam( 9, $brand);
 +    $stmt->bindParam( 10, $url_to_shop);
 +    $stmt->bindParam( 11, $consist);
 +    $stmt->bindParam( 12, $description);
 +    $stmt->bindParam( 13, $fotos);
 +    $stmt->bindParam( 14, $sex);
 +
 +
 +    foreach ($xlsx->rows() as $fields)
 +    {
 +        $sku = $fields[1];
 +        $name = $fields[2];
 +        $color = $fields[3];
 +        $price_opt = $fields[4];
 +        $price_retail = $fields[5];
 +        $size = $fields[6];
 +        $type = $fields[7];
 +        $category = $fields[8];
 +        $brand = $fields[9];
 +        $url_to_shop = $fields[10];
 +        $consist = $fields[11];
 +        $description = $fields[12];
 +        $fotos = $fields[13];
 +        $sex = $fields[14];
 +
 +        $stmt->execute();
 +    }
 +
 +// Delete row with names of field
 +$etdb->query("DELETE FROM df_garne WHERE sku='Артикул';");        
 +</file>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!