Импортируем данные из 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”);
?>
Готово. Теперь таблицы успешно перенесены в базу данных. Удачи в экспериментах.
Ошибка в коде..
Melo, задача сей статьи не дать готовый код а показать направление, к тому же за редким исключением все примеры данные в подобных статьях в интернете и даже в печатных изданиях содержат ошибки, чтобы в процессе их отыскания человек лучше понял принцип того что он делает, а не тупо копировал код.
откройте для себя ‘insert from file’ =)
неверно, так как вся проблема в переходе на новую строку, а в этом коде создается не двумерный массив а одномерный, как одна строка и первый элемент новой строки он присабачивает к последнему элементу предидущей строки
с рускими буквами работает с багами. То пропускает слова то нормально отображает