在 codigniter 中切换数据库服务器以进行读写操作。

阿南特·韦卡

我已经为我的数据库服务器完成了主从设置,所以在我的 codgniter 应用程序中,我想要的是在主服务器上执行所有写选项和在从服务器上执行所有读取操作。

谁能告诉我如何在 codgniter version3 中实现这一点。

谢谢。

阿南特·韦卡

你必须更新 system/database/DB_Driver.php 文件。

您必须在此文件中进行 3 个小的更改,这非常简单。

1) 在内部构造中添加您的读写服务器凭据。

        $this->server_details['local_server']['hostname'] = "localhost";
        $this->server_details['local_server']['username'] = "select_user";
        $this->server_details['local_server']['password'] = "password";       

        $this->server_details['live_server']['hostname'] = "192.192.223.22";  
        $this->server_details['live_server']['username'] = "write_user"; 
        $this->server_details['live_server']['password'] = "password";        

2) Create New 函数将切换数据库连接以进行选择和写入查询。

 private function ebrandz_switch_db_for_read_write($sql) {               

       if( $this->hostname == $this->server_details['local_server']['hostname'] &&  $this->username == $this->server_details['local_server']['username'] &&  $this->password == $this->server_details['local_server']['password'] ) {    
                   //echo $sql.'<br/>';
         if(stristr($sql, 'SELECT')) {   
                            foreach($this->server_details['local_server'] as $index_key => $index_value ) { 
                                $this->$index_key = $index_value;  
                            }             

                              $this->conn_id = null;  //unset resource link 
                              $this->initialize();   //Reinitialize connnection with new parameters                                                                                                       

                    } else {    
                            //die('write operation is not allowed.');
                            foreach($this->server_details['live_server'] as $index_key => $index_value ) { 
                                 $this->$index_key = $index_value;  
                            }  
                            $this->conn_id = null ; //unset resource link 
                            $this->initialize();    //Reinitialize connnection with new parameters                                                           
                    }

               } else if( $this->hostname == $this->server_details['live_server']['hostname'] &&  $this->username == $this->server_details['live_server']['username']  &&  $this->password ==  $this->server_details['live_server']['password'] ) {  

                    if(stristr($sql, 'SELECT')) { 
                            foreach($this->server_details['local_server'] as $index_key => $index_value ) { 
                                 $this->$index_key = $index_value;  
                            }  

                            $this->conn_id = null ;  //unset resource link 
                            $this->initialize();     //Reinitialize connnection with new parameters      

                    } else {  
                            //die('write operation is not allowed.');
                            foreach($this->server_details['live_server'] as $index_key => $index_value ) { 
                                 $this->$index_key = $index_value;
                            } 

                            $this->conn_id = null ; //unset resource link 
                            $this->initialize();    //Reinitialize connnection with new parameters                                                           
                    }

               }

               //Code to re initialize the connection 
    }

3) 在这个文件的 Query 函数中,你必须调用之前定义的函数。

// Verify table prefix and replace if necessary
    if ($this->dbprefix !== '' && $this->swap_pre !== '' && $this->dbprefix !== $this->swap_pre)
    {
        $sql = preg_replace('/(\W)'.$this->swap_pre.'(\S+?)/', '\\1'.$this->dbprefix.'\\2', $sql);
    }

     /**
     * @author Anant Waykar
     * if query is read only then load some other database
     */
            $this->ebrandz_switch_db_for_read_write($sql);                     
      //Code to re initialize the connection 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用codigniter不会显示数据库中的值

来自分类Dev

如何在codigniter模型中基于上次注册的id进行设置?

来自分类Dev

如何在codigniter的控制器中的foreach中传递下拉值

来自分类Dev

使用codigniter的readreplica实现

来自分类Dev

codigniter中的钩子是什么?

来自分类Dev

如何使用 Ajax codigniter 实现分页搜索

来自分类Dev

Swagger 2 @ApiIgnore属性在配置服务器中切换

来自分类Dev

在MySQL / Oracle数据库中切换布尔值

来自分类Dev

在ASP.NET中切换动态数据库

来自分类Dev

如何在laravel 5.2中切换数据库

来自分类Dev

在sqlite / delphi中切换连接中的数据库文件必须做什么

来自分类Dev

检测Redis的主数据库故障转移并自动将从服务器切换为主服务器?

来自分类Dev

添加监听器以在操作栏中切换

来自分类Dev

如何在codigniter中转换关键的ti索引

来自分类Dev

从xamp上的codigniter删除index.php无法正常工作

来自分类Dev

连接到IBM AS400服务器以进行数据库操作挂起

来自分类Dev

在a中切换monad以进行理解

来自分类Dev

如何在1个Discord服务器中而不是在机器人所在的所有Discord服务器中切换命令?

来自分类Dev

如何手动测试前端并在服务器响应之间进行切换,

来自分类Dev

在计算机/服务器之间进行程序执行切换

来自分类Dev

在MapBox中切换GeoJsonSource数据

来自分类Dev

服务器切换后,全局消息消失了

来自分类Dev

切换窗口专用服务器

来自分类Dev

在服务器响应上切换活动

来自分类Dev

即时运行5.7切换数据库

来自分类Dev

在Java中的数据库之间切换

来自分类Dev

数据库之间的Codeigniter切换

来自分类Dev

sqlite 3中的数据库角色切换

来自分类Dev

使用DI / StructureMap切换数据库

Related 相关文章

热门标签

归档