我想知道您是否对在PHP中使用dbase有一些想法/建议。
这是我的问题,我必须"翻译" PHP中的Foxpro脚本,我使用dbase,因为我必须处理.DBF文件。问题是PHP执行脚本所需的时间,因为我没有找到更好的方法来翻译选择查询,而不是遍历整个文件来选择我需要的数据...
显然,我已经达到了PHP将脚本呈现给用户需要太多时间的程度。我知道我可以通过修改php.ini文件等给服务器更多的时间来执行PHP,但这不是一个解决方案,因为这个脚本以后几乎可以被网站的每个用户访问#39 ; m开发,所以如果它可以尽可能快地渲染那将是非常好的......
因此,总而言之,我可以做些什么来在.dbf文件查询上使用PHP获得更快的执行时间?你会如何在PHP中翻译Foxpro的SELECT查询?你建议我用PHP以外的其他语言编写这个脚本吗?
我举一个例子说明我要翻译的内容,它只是我要翻译的一小部分,而.dbf文件包含至少50 000行,每行至少10列:/
FUNCTION
PARAMETERS n_pc_id, l_pc_euro, n_sf_id, l_contrat
PRIVATE tb_res, mwhere
DIMENSION tb_res[1]
STORE 0 TO tb_res
IF n_sf_id = 0
IF l_contrat
mwhere = "lig_mo.lo_gar = 'T' AND mo.mo_sf_id != m.pa_sfd_id"
ELSE
mwhere = "lig_mo.lo_gar != 'T' AND mo.mo_sf_id != m.pa_sfd_id"
ENDIF
ELSE
IF l_contrat
mwhere = "lig_mo.lo_gar = 'T' AND mo.mo_sf_id = n_sf_id"
ELSE
mwhere = "lig_mo.lo_gar != 'T' AND mo.mo_sf_id = n_sf_id"
ENDIF
ENDIF
SELECT SUM(lig_mo.lo_qte);
FROM mo, lig_mo;
WHERE mo.mo_id = lig_mo.lo_mo_id;
AND (lig_mo.lo_pc_id = n_pc_id;
AND &mwhere;
AND lig_mo.lo_mo_id != 99999999);
AND lig_mo.lo_type IN ('F','V','B');
INTO ARRAY tb_res
RETURN tb_res[1]
答案 0 :(得分:0)
你绝对不想连续做这件事。我会看一下this discussion从PHP访问DBF文件,然后你可以将(大概是Rushmore优化的)查询直接传递给它,然后将其更改为使用查询参数。