Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #67, ИЮЛЬ 2004 г.

Не MySQL’ом единым!

Никита Кислицин

Xakep, номер #067, стр. 067-094-4


echo "Ошибка при открытии БД!"; return 0;

}

$key=dba_firstkey($dbp); /* $key - идентификатор текущей записи. В начале цикла присваиваем этой переменной указатель первой записи */

while($key != false) { /* Цикл до конца БД */

$val=dba_fetch($key, $dbp); /* Получаем данные записи по идентификатору */

$ent=unserialize($val); /* Создаем массив по полученной строке */

echo "$ent[name] $ent[$phone] $ent[email] >br<\n"; /* Помещаем в поток вывода необходимые данные, элементы массива */

$key=dba_nextkey($db); /* Переходим к следующей записи */

}

}

Правда, элементарно? ;) Аналогичным образом описываются и все остальные функции, реализующие поиск по базе и сортировку. Сейчас мне бы хотелось остановиться на вопросе модификации данных. Во-первых, как будет работать функция, удаляющая указанную пользователем запись? Да очень легко! После открытия БД мы при помощи функции dba_delete($id, $dbp) удаляем запись с идентификатором $id из базы данных, доступной по дескриптору $dbp. Обрати внимание, что сразу после этого необходимо вызвать вспомогательную процедуру dba_sync($dbp), которая внесет требуемые изменения в БД. Дело в том, что при выполнении всех функций модификации данных на самом деле программа работает с копией данных, хранимых в памяти. Поэтому после модификации нужно вызвать функцию, которая синхронизирует копию данных и информацию, записанную в файле.

Теперь давай реализуем функцию, импортирующую данные в формате CSV. Сначала мы открываем базу данных и файл CSV. Затем при помощи get_next_id() получаем очередной идентификатор, который можно присвоить новой записи. В цикле while, пока не достигнут конец нашего CSV-файла, мы читаем построчно данные, преобразуем прочитанные строки в массив, создаем на его основе сериализованную строку и помещаем в нашу БД. При этом мы предполагаем, что данные в файле CSV располагаются точно в том же порядке, что и члены массива с данными о записях телефонной книги. Это обязательное условие. Таким образом, мы написали функцию, которая добавляет в БД записи, полученные из файла в формате CSV. Осталась малость - научиться загружать файлы на сервер. Вообще говоря, мы с тобой этим уже много раз занимались - посмотри, как это реализовывалось в наших прошлых программах. Напомню также, что на диске ты найдешь полный код сценария, который настоятельно рекомендую тебе изучить. Удачи.

CD

На диске ты найдешь полный исходный код телефонной книги, работающей с нереляционными БД, последнюю версию библиотеки GD, последний релиз PHP 4.3.7, а также кучу документации по DBA API PHP.

INFO

В одном из ближайших номеров я протестирую на производительность сценарии, использующие как реляционные БД (mySQL, Postgres, etc), так и нереляционные.

Назад на стр. 067-094-3  Содержание