我正在寻找一种最简单的方法,可以使用基于变量ID号的PHP从平面文件数据库中提取一行数据。
例如,如果页面传递的ID为10001,则会获取用户的名字,姓氏,公司,地址和其他人口统计信息等。
数据库是一个文本文件,第一行包含字段名称,下面的后续行包含数据。它的制表符分隔,每行用回车符分隔。
有什么想法吗?提前谢谢。
编辑:Eddie带来的速度问题肯定是有效的。因此,为了解决PHP平面文件数据库交互的需要,我改为使用WebDNA在我的PHP页面之前提取页面上的数据库数据。然后我通过表单发布了从WebDNA页面到PHP页面的数据。因此,客户的付款流程还有一个额外步骤,但数据是以标准和快速的方式提取的。
答案 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)