PHP缓存数据库结果和输入变量

时间:2013-08-05 17:08:53

标签: php odbc

我有一个用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;
}

有更好的方法吗?在这里看一些其他问题谈到了将结果写入文件,但这似乎是每个用户的每个页面的文件的麻烦。

其他建议似乎只适用于未更改的查询(例如,加载博客文章)。

0 个答案:

没有答案