首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否修改CodeIgniter活动记录查询命令?

是否修改CodeIgniter活动记录查询命令?
EN

Stack Overflow用户
提问于 2011-07-19 21:48:22
回答 1查看 347关注 0票数 0

我正在开发一个Codeigniter (2.0.2)应用程序,它将使用主数据库进行所有写操作(插入/更新/删除),并将读副本用于所有读操作(选择)。

现在我知道我可以在代码中访问两个不同的数据库对象,以将单个请求路由到特定的数据库服务器,但我认为有一种更好的方法,自动化的方法。我将使用MySQL和Active Record,还想内置Memcache检查-尽管不会立即使用它,但我希望在未来使用该选项,在此阶段内置。

我在想是否有可能添加某种钩子/库来拦截$this->db->查询,这样就会发生以下情况:

1)收到SQL查询

2)检查是否选择查询

2a)如果选择,则查看Memcache是否处于活动状态,如果是,则编码SQL并检查Memcache是否响应。

2b)如果没有memcache响应,或者Memcache未激活,则通过READ MySQL服务器正常执行查询。

3)查询没有select,所以通过写MySQL服务器正常执行查询。

4)返回响应。

我确信,从这个角度来看,这应该是相当简单的,但无论我怎么看,我都没有看到一个潜在的答案--但肯定有一个!任何人都可以帮助/协助吗?

此外,我还希望能够记录所有写SQL命令的故障排除,大概最好的方式是介绍3a)写SQL命令到纯文本文件…添加到上述方案中。我不相信MySQL真的记录了非SELECT查询...是吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-19 21:58:22

这种类型的行为有点超出了CI的正常范围。不幸的是,最好的办法是手动extend the database drivers,特别是覆盖函数simple_query_execute (simple_query是_execute的包装器,它只是确保初始化)。这是唯一可以保证捕获所有查询并相应地对逻辑进行分支的地方。(您可能还希望覆盖close,因为这是清理脚本)

(就我个人而言,我会让SELECT DB将辅助数据库加载到它自己中,并有条件地调用$write_ DB ->simple_query,这似乎是最小的麻烦)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6748190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档