【发布时间】:2014-09-25 17:22:21
【问题描述】:
我使用 Codeigniter 数据库缓存已经有一段时间了,它工作得很好,但现在我遇到了一个特定查询的奇怪问题。步骤如下:
- 我的缓存目录是空的。
- 我打开 URL /myproject/mycontroller/myaction/
- 文件缓存在 mycontroller-myaction 目录中(我用记事本打开文件以确保它包含正确的数据。
- 我再次打开 /myproject/mycontroller/myaction/ 期望从缓存中检索数据,结果发现数据是从数据库中检索的,并且重新生成了文件。我不知道为什么,但关键是生成的文件没有用。
如果对你很重要,我会给你下一个信息:
- 查询是一个存储过程。
- 我还有其他运行良好的查询。
非常感谢您的帮助,如果您需要具体数据,请告诉我。
谢谢。
使用 xdebug 我发现在查询函数的 DB_driver.php 文件中,第 277 行有一个条件如下:
// Is query caching enabled? If the query is a "read type"
// we will load the caching class and return the previously
// cached query if it exists
if ($this->cache_on == TRUE AND (stristr($sql, 'SELECT')))
{
if ($this->_cache_init())
{
$this->load_rdriver();
if (FALSE !== ($cache = $this->CACHE->read($sql)))
{
return $cache;
}
}
}
查询必须是 SELECT,我使用的是存储过程,我的模型是:
public function cobertura($param1= NULL) {
$query = $this->db->query("[SP_NAME] ?", array($param1));
}
return $query->result();
}
所以当我使用存储过程而不是 SELECT 语句时,条件返回 FALSE 并再次生成缓存文件。
如何修改该函数以将我的存储过程检测为有效语句?
非常感谢。
【问题讨论】:
-
嗨,你能把你的代码贴在你的控制器上吗?
-
@PinoyPal,我添加了有用的信息,感谢您的宝贵时间。
标签: sql-server database codeigniter caching stored-procedures