使用PHP从平面文件数据库中读取

时间:2012-01-06 19:34:21

标签: php database flat-file

我正在寻找一种最简单的方法,可以使用基于变量ID号的PHP从平面文件数据库中提取一行数据。

例如,如果页面传递的ID为10001,则会获取用户的名字,姓氏,公司,地址和其他人口统计信息等。

数据库是一个文本文件,第一行包含字段名称,下面的后续行包含数据。它的制表符分隔,每行用回车符分隔。

有什么想法吗?提前谢谢。

编辑:Eddie带来的速度问题肯定是有效的。因此,为了解决PHP平面文件数据库交互的需要,我改为使用WebDNA在我的PHP页面之前提取页面上的数据库数据。然后我通过表单发布了从WebDNA页面到PHP页面的数据。因此,客户的付款流程还有一个额外步骤,但数据是以标准和快速的方式提取的。

3 个答案:

答案 0 :(得分:4)

我以前做过这件事,非常关心速度。数据文件有大约10,000行,但速度非常快。但是,如果同时发出请求,您可能会遇到问题。

基本上,以只读模式打开文件,一次读取一行,将行解析为数组,找到ID,然后重复,直到找到所需的ID。

根据文本文件的大小,您当然可以考虑使用数据库。

答案 1 :(得分:3)

  

数据库是一个文本文件,第一行包含字段名称,下面的后续行包含数据。它的制表符分隔,每行用回车符分隔。

听起来像CSV type of file。 PHP有函数和类来处理这些,你只需要指定字段分隔符并稍微关注行分隔符:fgetcsv­Docs

按照Eddie的领导,该功能看起来像:

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
)

答案 2 :(得分:0)

如果文件格式正确,此功能可以简化您的搜索:

http://us3.php.net/fgetcsv

适用于CSV,但如果您有标准分隔符,则将分隔符更改为函数参数。