Чтение из базы данных плоских файлов с помощью PHP


Я ищу самый простой способ извлечь строку данных из базы данных плоских файлов с помощью PHP на основе переменного идентификационного номера.

Например, если странице передается идентификатор 10001, она захватывает имя, фамилию, компанию, адрес и другую демографическую информацию пользователя и т.д.

База данных представляет собой текстовый файл, в первой строке которого указаны имена полей, а последующие строки ниже содержат данные. Его табуляция разделена, и каждая строка разделена кареткой вернуть.

Есть идеи? Заранее спасибо.

Редактировать: Проблема скорости, поднятая Эдди, определенно является обоснованной. Итак, чтобы обойти необходимость взаимодействия с базой данных плоских файлов PHP, я вместо этого использовал WebDNA для извлечения данных базы данных на странице, предшествующей моей странице PHP. Затем я передал данные со страницы WebDNA на страницу PHP через сообщение формы. Таким образом, в процессе оплаты для клиента есть 1 дополнительный шаг, но данные выводятся стандартным и быстрым способом.

Author: msargenttrue, 2012-01-06

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
)
 3
Author: Ben D, 2012-01-06 23:22:13

Я делал это раньше и был очень обеспокоен скоростью. В файле данных было около 10 000 строк, но это довольно быстро. Однако у вас могут возникнуть проблемы с доступом к файлу при наличии одновременных запросов.

В принципе, откройте файл в режиме только для чтения, считывайте по одной строке за раз, преобразуйте строку в массив, найдите идентификатор и повторяйте, пока не найдете нужный идентификатор.

В зависимости от размера текстового файла, вы, конечно, можете рассмотреть возможность создания базы данных.

 4
Author: Eddie Paz, 2012-01-06 19:40:22

Эта функция может упростить ваш поиск, если файл правильно сформирован:

Http://us3.php.net/fgetcsv

Это для CSV, но если у вас есть стандартный разделитель, вы меняете его как параметр функции.

 0
Author: Fleep, 2012-01-06 20:43:53