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

使用PHP从平面文件数据库中读取,php,database,flat-file,Php,Database,Flat File,我正在寻找一种最简单的方法,根据一个可变的ID号,使用PHP从平面文件数据库中提取一行数据 例如,如果页面被传递了10001的ID,它将获取用户的名字、姓氏、公司、地址和其他人口统计信息等 数据库是一个文本文件,第一行有字段名,下面的后续行包含数据。它的制表符是分隔的,每一行由回车符分隔 有什么想法吗?提前谢谢 编辑:埃迪提出的速度问题绝对是正确的。因此,为了解决PHP平面文件数据库交互的需要,我使用WebDNA在PHP页面之前提取页面上的数据库数据。然后,我通过表单post将数据从WebDNA

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

例如,如果页面被传递了10001的ID,它将获取用户的名字、姓氏、公司、地址和其他人口统计信息等

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

有什么想法吗?提前谢谢


编辑:埃迪提出的速度问题绝对是正确的。因此,为了解决PHP平面文件数据库交互的需要,我使用WebDNA在PHP页面之前提取页面上的数据库数据。然后,我通过表单post将数据从WebDNA页面传递到PHP页面。因此,对客户来说,在支付过程中还有一个额外的步骤,但数据是以标准和快速的方式提取的

我以前做过,非常关心速度。数据文件大约有10000行,但速度相当快。但是,如果同时有请求,您可能会遇到访问文件的问题

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

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

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

那听起来像是一场灾难。PHP有函数和类来处理这些,您只需指定字段分隔符,并稍微注意行分隔符:

在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”的示例用法:

将是:

$data = get_data_field_from_tsv(14, '/path/to/testfile.db');
print_r($data);
其结果是:

Array
(
    [0] => 14
    [1] => test222
    [2] => test333
    [3] => test444
)

如果文件格式正确,此函数可以简化搜索:


它是针对CSV的,但是如果您有一个标准分隔符,您可以将分隔符更改为函数参数。

为什么要使用非标准格式vs XML/JSON/etc?此外,你为什么要使用一个大概有上万条记录的平面文件?我正在一个网站上工作,这个网站已经接近完成了,有几个平面文件数据库和用WebDNA编码的数据库交互。然而,为了与Authorize.net接口,我将PHP用于一个页面,因为该语言有一个简单的SDK。我正在寻找最快的修复程序,以获取当前用户数据并将其传递到支付网关表单的第一页,这样用户就不必重新输入数据。您看过了吗?SQLite是否适用于我特定格式的CSV样式平面文件数据库?或者我必须创建与SQLite兼容的全新数据库吗?此代码段看起来很有希望,但在将数据传递给函数后,我无法成功显示数据。这样的事情不应该奏效吗?从_tsv(3002,“位于同一文件夹中的mydatabase.db”)获取_数据_字段_;echo$数据[0];echo$数据[1];echo$数据[2];我得到的只是一张空白页。试试打印($data)。。。我猜它返回的是假的?你能给我一个示例文件吗?我刚刚更新了它,以显示一个在我这方面起作用的使用场景。此外,我还修改了函数,在“return$data”的末尾添加了分号。。。如果你有错误报告关闭,它将解释空白页。谢谢更新。奇怪的是…我仍然得到了空白屏幕,即使有更新的代码。权限似乎没有问题,我知道错误被打开了,因为我看到了分号的问题。路径不必是服务器上的完整路径,对吗?我的是$data=get_data_field_from_tsv(14,'testfile.db');另外,我的db在最后一行有一个额外的回车符(WebDNA要求),我不知道这是否会有任何影响。以下是最新消息:好吧,我想我看到了问题所在。PHP默认假定行终止符将是新行“\n”,而终止符将是回车符“\r”。如果不想修改文件本身,可以尝试让PHP通过在脚本顶部设置来检测回车终止符。让我知道这是否有效。谢谢你。我做了一个编辑来描述我如何在没有PHP的情况下完成这个数据库交互。
Array
(
    [0] => 14
    [1] => test222
    [2] => test333
    [3] => test444
)