Чтение из базы данных плоских файлов с помощью PHP
Я ищу самый простой способ извлечь строку данных из базы данных плоских файлов с помощью PHP на основе переменного идентификационного номера.
Например, если странице передается идентификатор 10001, она захватывает имя, фамилию, компанию, адрес и другую демографическую информацию пользователя и т.д.
База данных представляет собой текстовый файл, в первой строке которого указаны имена полей, а последующие строки ниже содержат данные. Его табуляция разделена, и каждая строка разделена кареткой вернуть.
Есть идеи? Заранее спасибо.
Редактировать: Проблема скорости, поднятая Эдди, определенно является обоснованной. Итак, чтобы обойти необходимость взаимодействия с базой данных плоских файлов PHP, я вместо этого использовал WebDNA для извлечения данных базы данных на странице, предшествующей моей странице PHP. Затем я передал данные со страницы WebDNA на страницу PHP через сообщение формы. Таким образом, в процессе оплаты для клиента есть 1 дополнительный шаг, но данные выводятся стандартным и быстрым способом.
3 answers
База данных представляет собой текстовый файл, в первой строке которого указаны имена полей, а последующие строки ниже содержат данные. Его табуляция разделена, и каждая строка отделена возвратом каретки.
Это звучит как Файл CSV типа . В PHP есть функции и классы для работы с ними, вам нужно только указать разделитель полей и немного позаботиться о разделителе строк: fgetcsv
Документы
Следуя примеру Эдди, функция будет выглядеть примерно так:
function get_data_field_from_tsv($id_to_look_for, $filename){
$id_field_im_interested_in_position = '0'; //if it's the first field in the line
$row = 1;
if (($handle = fopen($filename, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 0, "\t")) !== FALSE) {
$row++;
if (trim($data[$id_field_im_interested_in_position])==$id_to_look_for){
fclose($handle);
return $data;
}
}
fclose($handle);
return false;
}
}
Итак, пример использования для следующего файла "testfile.db":
ID SECOND THIRD FOURTH
12 test2 test3 test4
13 test22 test33 test44
14 test222 test333 test444
Будет:
$data = get_data_field_from_tsv(14, '/path/to/testfile.db');
print_r($data);
Что приводит к:
Array
(
[0] => 14
[1] => test222
[2] => test333
[3] => test444
)
Я делал это раньше и был очень обеспокоен скоростью. В файле данных было около 10 000 строк, но это довольно быстро. Однако у вас могут возникнуть проблемы с доступом к файлу при наличии одновременных запросов.
В принципе, откройте файл в режиме только для чтения, считывайте по одной строке за раз, преобразуйте строку в массив, найдите идентификатор и повторяйте, пока не найдете нужный идентификатор.
В зависимости от размера текстового файла, вы, конечно, можете рассмотреть возможность создания базы данных.
Эта функция может упростить ваш поиск, если файл правильно сформирован:
Это для CSV, но если у вас есть стандартный разделитель, вы меняете его как параметр функции.