我有一个用 PHP 编写的相当基本的 CRUD 应用程序(强调 R)。它通过ODBC连接到 OpenEdge 数据库。应用程序中的每个页面基本上都会返回数据库查询的结果并将它们显示在表格中。每个页面顶部都有一个表单,允许用户为页面查询指定参数。表单加载相同的页面,但将用户参数作为 GET 变量传递。
我希望能够存储查询结果,只要用户不指定页面加载相同内容(并且不从数据库中获取新数据)的新参数,即使在后续页面加载(例如,用户可以访问另一个页面并返回查看相同的数据)。我们的理由是,我们希望用户能够像分析纸质报告一样分析数据(这样,如果要更新数据库,它就不会在分析过程中发生变化)。
我目前这样做的方式是使用 SESSION 变量。我让页面在会话中存储输入参数和结果。下次加载页面时,它会检查是否设置了 SESSION 和 GET 变量,然后比较它们是否相同。如果它们不相同,则使用 GET 变量再次查询数据库。如果它们相同,则使用缓存的数据。
这种方法的问题是它会导致一些非常笨重的代码,并且不能很好地随着输入变量的数量而扩展。
仅一个变量的代码示例part
及其结果part_orders
:
if (isset($_GET['part']) && isset($_SESSION['part'])){
if(($_GET['part'] == $_SESSION['part']) && isset($_SESSION['part_orders'])){
$part_orders = $_SESSION['part_orders'];
$part = $_SESSION['part'];
}
else{
$part = $_GET['part'];
$part_orders = get_new_part_order_list($part, $query);
$_SESSION['part_orders'] = $part_orders;
$_SESSION['part'] = $part;
}
}
elseif(!isset($_GET['part']) && isset($_SESSION['part'])){
if(isset($_SESSION['part_orders'])){
$partial_part_no = $_SESSION['part'];
$part_orders = $_SESSION['part_orders'];
$part = '';
}
else{
$part = $_SESSION['part'];
$part_orders = get_new_part_order_list($part, $query);
$_SESSION['part_orders'] = $part_orders;
$_SESSION['part'] = $part;
}
}
elseif(isset($_GET['part']) && !isset($_SESSION['part'])){
$part = $_GET['part'];
$part_orders = get_new_part_order_list($part, $query);
$_SESSION['part_orders'] = $part_orders;
$_SESSION['part'] = $part;
}
有一个更好的方法吗?在这里查看其他一些关于将结果写入文件的问题,但这对于每个用户的每个页面的文件来说似乎都很麻烦。
其他建议似乎只适用于未更改的查询(例如,加载博客文章)。