Импортируем данные из csv в БД

В своей повседневной деятельности мне часто приходится использовать таблицы excel чтобы хранить всякие расписания, списки и т.д. Раньше мне вполне хватало функциональности этого пакета, но в процессе программирования на php под mysql меня посетила одна интересная мысль… Ведь по сути, mysql предоставляет почти весь функционал excel, но в связке с php у нас появляется невероятно гибкий инструмент для работы с таблицами. Весь функционал можно реализовать на php, а таблицы хранить в базе данных. Только представьте, какие возможности перед вами открываются (конечно, придется постараться, чтобы все это реализовать) в связывании и обработке всех ваших таблиц и списков, хранимых на компьютере! :)

Можно создать единую информационную систему, хранящую все ваши данные и предоставляющую вам удобное средство доступа к ней в несколько нажатий клавиш! (все вспомнили Google Analytics?).

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

Итак, приступим. Первая задача, которая станет на нашем пути – это перенос данных из таблицы excel в базу данных.

В php есть библиотеки для работы с excel-документами, но они немного сложны в использовании. Поэтому, для работы с нашими не сложными таблицами, предпочтительнее будет сперва конвертировать их в csv формат (это можно сделать прямо через Microsoft Excel при сохранении).

CSV-файл представляет из себя обычный текстовый документ, в котором поля разделяются между собой знаком “,” или “;”.

Для работы с csv в php предусмотрен небольшой набор функций. Мне нужно было только прочитать данные из csv-файла, поэтому мне понадобилась только одна функция.

fgetcsv ($fd, $length, $delim);

Эта функция является аналогом функции чтения строки из файла fgets, только она возвращает массив полей полученных из считанной строки.
$fd содержит дескриптор файла из которого происходит чтение, $length должно быть больше чем длинна самой длинной строки в файле, а $delim – это вид разделителя, который используется для разделения полей ( “;” в нашем случае).

Чтение всего csv-файла в массив будет выглядеть следующим образом:

<?
$fd = fopen("test.csv", "r");
while (($arr = fgetcsv($fd, 1024, ";")) !== FALSE) {
$data[] = $arr;
}

fclose($fd);

?>

После выполнения этого кода в двумерном массиве $data окажется вся наша таблица.
Вот и все. Все просто. Теперь осталось лишь занести всю эту таблицу в нашу БД.

Для наглядности предположим, что в нашей excel-таблицы хранился список вашей группы из университета.
Поля будут следующими:
fio – ФИО студента (ки),
phone – номер телефона студента (ки),
birthday – дата рождения.

Пусть, поля в таблице, из базы данных будут иметь такие имена. Тогда вся программа импорта данных из csv-файла в БД будет такой:

index.php

<?
include “connect.php”;

$fd = fopen("test.csv", "r");
while (($arr = fgetcsv($fd, 1024, ";")) !== FALSE) {
$sql = “insert into my_group (fio, phone, birthday) values($arr[0],$arr[1],$arr[2]);
}

fclose($fd);
?>

connect.php

<?
mysql_connect(“localhost”, “root”, “”);
mysql_select_db(“test”);
?>

Готово. Теперь таблицы успешно перенесены в базу данных. Удачи в экспериментах. :)





Читайте также:



5 Ответов на “Импортируем данные из csv в БД”

  1. Melo

    Ошибка в коде..

  2. Melo, задача сей статьи не дать готовый код а показать направление, к тому же за редким исключением все примеры данные в подобных статьях в интернете и даже в печатных изданиях содержат ошибки, чтобы в процессе их отыскания человек лучше понял принцип того что он делает, а не тупо копировал код.

  3. откройте для себя ‘insert from file’ =)

  4. неверно, так как вся проблема в переходе на новую строку, а в этом коде создается не двумерный массив а одномерный, как одна строка и первый элемент новой строки он присабачивает к последнему элементу предидущей строки

  5. aleks

    с рускими буквами работает с багами. То пропускает слова то нормально отображает


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map