2011-08-30 75 views
0

我仍然在運行時手動連接到數據庫時遇到麻煩。我開了一個新問題,因爲沒有找到答案。CodeIgniter運行時數據庫連接

這裏是我與連接用戶來驗證輸入與形式的用戶名和密碼連接到數據庫的情況下,

。然後用這個新信息,如果用戶有效,我必須用這個新的用戶名和密碼連接到數據庫。長相包含以下內容:

配置/ database.php中

$active_record = TRUE; 
    $db['default']['hostname'] = 'host'; 
    $db['default']['username'] = 'username'; 
    $db['default']['password'] = 'pwd'; 
    $db['default']['database'] = 'dbname'; 
    $db['default']['dbdriver'] = 'oci8'; 
    $db['default']['dbprefix'] = ''; 
    $db['default']['pconnect'] = FALSE; 
    $db['default']['db_debug'] = TRUE; 
    $db['default']['cache_on'] = FALSE; 
    $db['default']['cachedir'] = ''; 
    $db['default']['char_set'] = 'WE8ISO8859P1'; 
    $db['default']['dbcollat'] = ''; 
    $db['default']['swap_pre'] = ''; 
    $db['default']['autoinit'] = FALSE; 
    $db['default']['stricton'] = FALSE; 
在登錄控制器

然後:控制器/ login.php中

public function __construct(){ 
    parent::__construct(); 
    $this->output->enable_profiler(TRUE); 

    $this->CI =& get_instance(); 
    $this->db_con = $this->CI->load->database('default', FALSE, TRUE); 

    $this->load->model('Login_model'); 
    session_start(); 

} 

public function index(){     
    if (isset($_POST['ingresar'])){ 

     $d['data'] = $this->Login_model->Obtener_usuario($_POST['usuario']); 

     $_SESSION['logueo'] = $d['data']->row(); 

     if (empty($_SESSION['logueo'])){ 
      $d['error'] = 2; 
     } 
     else{ 
      if (is_null($_SESSION['logueo']->USER_ORACLE)){ 
       $d['error'] = 1; 
      } 
      if (!is_null($_SESSION['logueo']->N_SECUENCIA)){ 
       cargar_var_sesion($_POST['usuario'], $_SESSION['logueo']->USER_ORACLE, $_SESSION['logueo']->N_SECUENCIA, $_SESSION['logueo']->C_USR_NOM_APE); 

       $db['limited']['hostname'] = 'samehost'; 
       $db['limited']['username'] = $_POST['usuario']; 
       $db['limited']['password'] = $_POST['clave']; 
       $db['limited']['database'] = 'samedbname'; 
       $db['limited']['dbdriver'] = 'oci8'; 
       $db['limited']['dbprefix'] = ''; 
       $db['limited']['pconnect'] = FALSE; 
       $db['limited']['db_debug'] = TRUE; 
       $db['limited']['cache_on'] = FALSE; 
       $db['limited']['cachedir'] = ''; 
       $db['limited']['char_set'] = 'WE8ISO8859P1'; 
       $db['limited']['dbcollat'] = ''; 
       $db['limited']['swap_pre'] = ''; 
       $db['limited']['autoinit'] = FALSE; 
       $db['limited']['stricton'] = FALSE; 

       $active_group = 'limited'; 

       $this->db = $this->CI->load->database('limited', FALSE, TRUE);     
       redirect('inicio', 'location'); 
      } 
      else{ 
       $d['error'] = 2;  
      } 
     }   
    } 
    else{ 
     $d['error'] = 0;  
    } 

    $this->load->view('/componentes/header'); 
    $this->load->view('/componentes/menu_sin_login'); 
    $this->load->view('/login/login', $d); 
    $this->load->view('/componentes/footer');  
} 

一切順利該控制器內確定,但當重定向是執行(加載不同的型號),例如,tareas_model.php我在第一行繼續收到相同的錯誤:

models/tareas_model.php

function __construct() 
{ 
    parent::__construct(); 
    $query = $this->db->query('ALTER SESSION SET nls_sort = \'SPANISH\''); 
} 

的錯誤是:

A PHP Error was encountered 
Severity: Notice 
Message: Undefined property: Inicio::$db 
Filename: core/Model.php 
Line Number: 50 
Fatal error: Call to a member function query() on a non-object in /var/www/crm/application/models/tareas_model.php on line 8 

我也試着設置$這個 - >分貝爲一個會話變量,但我不斷收到同樣的錯誤,我開車很瘋狂。我試過了我在網上找到的一切,但都沒有運氣。

任何幫助?

+0

朋友你好!有沒有人對此有任何想法?我真的需要這個才能工作。提前致謝! – Veronica

回答

1

那麼,對於那些在這個問題下運行的人,我想我找到了解決方案。我修改的文件如下:

配置/ database.php中

$active_record = TRUE; 
$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = ''; 
$db['default']['password'] = ''; 
$db['default']['database'] = ''; 
$db['default']['dbdriver'] = 'oci8'; 
$db['default']['dbprefix'] = ''; 
$db['default']['pconnect'] = FALSE; 
$db['default']['db_debug'] = TRUE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ''; 
$db['default']['char_set'] = 'WE8ISO8859P1'; 
$db['default']['dbcollat'] = ''; 
$db['default']['swap_pre'] = ''; 
$db['default']['autoinit'] = FALSE; 
$db['default']['stricton'] = FALSE; 

然後,首先接收POST用戶名和密碼作爲控制器: 控制器/ login.php中

public function __construct() 
{ 
    parent::__construct(); 
    $this->output->enable_profiler(TRUE); 
    session_start(); 

} 

public function index() 
{    
    if (isset($_POST['ingresar'])){ 

     if (!empty($_POST['usuario']) && !empty($_POST['clave'])){ 

      $c['hostname'] = "myhost"; 
      $c['username'] = strtoupper($_POST['usuario']); 
      $c['password'] = $_POST['clave']; 
      $c['database'] = "dbname"; 
      $c['dbdriver'] = "oci8"; 
      $c['dbprefix'] = ""; 
      $c['pconnect'] = TRUE; 
      $c['db_debug'] = TRUE; 
      $c['cache_on'] = FALSE; 
      $c['cachedir'] = ""; 
      $c['char_set'] = "WE8ISO8859P1"; 
      $c['dbcollat'] = ""; 
      $active_record = TRUE; 

      $_SESSION['c'] = $c; 

      $this->db = $this->load->database($_SESSION['c'], TRUE, TRUE); 
      $this->load->model('Login_model'); 

      $d['data'] = $this->Login_model->Obtener_usuario($_POST['usuario']); 

      $_SESSION['logueo'] = $d['data']->row(); //print_r($_SESSION['logueo']); 
      cargar_var_sesion($_SESSION['logueo']->C_USUARIO_WEB, $_SESSION['logueo']->USER_ORACLE, $_SESSION['logueo']->C_USR_NOM_APE, $this->db->conn_id, $_SESSION['c']); 
      redirect('inicio', 'location'); 

     } 
     else{ 
      $d['error'] = 1; 

      $this->load->view('/componentes/header'); 
      $this->load->view('/componentes/menu_sin_login'); 
      $this->load->view('/login/login', $d); 
      $this->load->view('/componentes/footer'); 
     }   
    } 
    else{ 
     $d['error'] = 0; 

     $this->load->view('/componentes/header'); 
     $this->load->view('/componentes/menu_sin_login'); 
     $this->load->view('/login/login', $d); 
     $this->load->view('/componentes/footer'); 
    } 

} 

然後,型號:models/login_model.php

function __construct() 
{ 
    parent::__construct(); 
    $CI =& get_instance(); 
} 
function Obtener_usuario($usuario) 
{ 
    $CI =& get_instance(); 
    $query_logueo = $CI->db->query('SELECT....'); 
    return $query_logueo; 
} 

The n的每個控制器我重新加載數據庫,如:

public function __construct() 
{ 
    parent::__construct(); 
    $this->output->enable_profiler(TRUE); 

    session_start(); 

    $this->db = $this->load->database($_SESSION['c'], TRUE, TRUE); 
    $this->load->model('Any_model'); 
} 

小地方就在每個控制器並且沒有在模型中那麼幾個,這是偉大的!

乾杯, V

1

這是爲改變運行DB配置....看起來像假設你正趕上從URL主機名和....按照你必須改變你的數據庫配置.. 。

1>現在

class yourcontrollername extends CI_Controller 

{ 

public function index($do='') 
    { 

//declare seesion or catch a url parameter's value in session 

     if(isset($_GET['qual'])) //Qual is parameter name which is supplied in url 
    { 
     session_start(); 
     $_SESSION['Company'] = $_GET['qual']; 


    } 

public function delx($id) 
    { 
     session_start(); 
     $Scompany = $_SESSION['Company']; 

    $this->load->helper('url'); 
    $server_url = site_url('api'); 

    $this->load->library('xmlrpc'); 

    $this->xmlrpc->server($server_url, 80); 
    $this->xmlrpc->method('delx_order_delete'); 
    $request = array(); 
    $request = array("id"=>$id , "Param"=>$Scompany); 


    $this->xmlrpc->request(array(array($request,'struct'))); 

    $this->load->library('session'); 

    $sess = array(); 

    if (! $this->xmlrpc->send_request()){ 
     $sess['err'] = $this->xmlrpc->display_error(); 
    }else{ 
     $resl = $this->xmlrpc->display_response(); 
     if($resl['failure'] != ''){ 
      $sess['err'] = $resl['failure']; 
     } 
     if($resl['success'] != ''){ 
      $sess['succ'] = $resl['success']; 
      $output = $this->session->userdata('output'); 
      if(is_array($output)){ 
       foreach($output as $key=>$valo){ 
        if($valo['ID'] == $id){ 
         unset($output[$key]); 
        } 
       } 
      } 
     } 
     $this->session->set_userdata($sess); 
     $this->session->set_userdata(array('output'=>$output)); 
    } 


} 


    } 



} 

,在API。模型

function x_order_delete($params) 
{ 
    $compname = $params['Param']; 

    if($compname == 'xyz.con') 

    { 

     $c['hostname'] = $compname; 
     $c['username'] = "username"; 
     $c['password'] = "password"; 
     $c['database'] = "db name"; 
     $c['dbdriver'] = "mysql"; 
     $c['dbprefix'] = ""; 
     $c['pconnect'] = TRUE; 
     $c['db_debug'] = TRUE; 
     $c['cache_on'] = FALSE; 
     $c['cachedir'] = ''; 
     $c['char_set'] = 'utf8'; 
     $c['dbcollat'] = 'utf8_general_ci'; 
     $c['swap_pre'] = ''; 
     $c['autoinit'] = TRUE; 
     $c['stricton'] = FALSE; 

     $_SESSION['c'] = $c; 


     $this->db = $this->load->database($_SESSION['c'], TRUE, TRUE); 

     //$this->load->database(); 

    if($query = $this->db->query('DELETE FROM table 
           Where ID = '.$params['id'])){ 

     return array("Successfully deleted record.",""); 
    } else { 
     return array("","Error deleting record."); 
    } 
    return $query; 
    } 
} 

就是這樣....我希望這會幫助你....祝您好運