有没有办法缓存从数据库中填充的多个选择菜单

时间:2011-04-19 18:06:26

标签: php caching

我有一个大型表格,有132(12x11)个选择菜单,这些菜单是从db(MySQL)填充的。问题很明显:由于所有这些数据库调用,页面需要很长时间才能加载。

表格的结构:每个房间有12个独立的部分,每个部分有11个下拉菜单(这里是链接http://tinypic.com/view.php?pic=6tfjpk&s=7)。

从其中11个下拉列表中,有8个是相同的“房间描述”。有没有办法....我可以以某种方式缓存那些下拉菜单,特别是第1节(房间1)中的那些8,然后只为其他所有部分(其他11)重新加载缓存? 我试图在函数中创建数组(从数据库创建下拉列表),并将动态变量指定为静态     static $ {$ var_name};

但是php解析器本身不允许动态变量是静态的。

2 个答案:

答案 0 :(得分:0)

为什么不将数组保存到session

答案 1 :(得分:0)

问题解决了!

@AJ

  1. 解决方案的第一部分是将查询中的数组保存到会话中(AJ的建议)。它有所帮助,但不是很多(没有像我预期的那样只能节省0.5秒的页面加载。页面在4,79秒之后在4,79秒内加载......在4,47秒内。

  2. 这部分是一个实际的解决方案。

  3. 在我的代码 dorpdown函数的开头我有这个代码:
    $dbh = new PDO(CONFIG_MYSQL_DSN, CONFIG_MYSQL_USERNAME, CONFIG_MYSQL_PASSWORD, array(PDO::ATTR_PERSISTENT => false));

    $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    这意味着每次调用函数时我都在创建一个新的数据库连接。我在前一段时间创建了这个函数时做的,它应该只用于测试目的,因为我实际上在每个页面都有包含文件,这确保我连接到数据库。它有一个选项array(PDO::ATTR_PERSISTENT => true

    因此,为了避免每次调用下拉函数时都建立数据库连接,我在该包含文件中将$ dbh设置为全局global $dbh;。我还在函数本身设置了global $dbh; 。现在页面仅加载0.6秒而不是4.76,这是一个伟大的改进!