2017-02-16 3 views
1

Wie kann ich eine Verbindung zu einer anderen Datenbank basierend auf den Anmeldedaten eines Benutzers herstellen?Nach dem Anmelden eine Verbindung zu einer anderen Datenbank herstellen?

db_helper.php

<?php 

function setDb($company_name, $branch_name) { 

    return array(
     'dsn' => '', 
     'hostname' => 'localhost', 
     'username' => 'root', 
     'password' => '', 
     'database' => $company_name.'_'.$branch_name, 
     'dbdriver' => 'mysqli', 
     'dbprefix' => '', 
     'pconnect' => FALSE, 
     'db_debug' => (ENVIRONMENT !== 'production'), 
     'cache_on' => FALSE, 
     'cachedir' => '', 
     'char_set' => 'utf8', 
     'dbcollat' => 'utf8_general_ci', 
     'swap_pre' => '', 
     'encrypt' => FALSE, 
     'compress' => FALSE, 
     'stricton' => FALSE, 
     'failover' => array(), 
     'save_queries' => TRUE 
    ); 

} 
?> 

Select_db.php (/ Bibliotheken) -> in autoload.php enthalten

<?php 

class Select_db { 

    public function thisdb($db_settings) { 

     return $this->load->database($db_settings, TRUE); 
    } 
} 

?> 

model.php (I zu sein scheinen bekomme hier einen Fehler, aber ich kann es nicht ausdrucken)

 if ($result_num == 1) { 

      $first_row = $query->row(); 
      $stored_password = $first_row->password; 


      if (crypt($password, $stored_password) == $stored_password) { 
       //Successful login 
       $sql = "SELECT 
          company.name As company_name, 
          branch.name As branch_name, 
          branch.id As branch_id 
         FROM 
          account 
         INNER JOIN 
          branch 
         ON 
          account.branch_id = branch.id 
         INNER JOIN 
          company 
         ON 
          branch.company_id = company.id 
         WHERE 
          account.username = ? 
       "; 
       $query = $this->db->query($sql, $username); 

       $data = array(); 
       $data['company_name'] = $query->row()->company_name; 
       $data['branch_id'] = $query->row()->branch_id; 
       $branch_name = $query->row()->branch_name; 

       $this->load->helper('db_helper'); 
       $db_settings = setDb($data['company_name'], $branch_name); 
       $dbname = $data['company_name'].'_'.$branch_name; 
       //$dsn = 'dbdriver://root:[email protected]/'.$dbname; 
       //$this->branch_db = $this->load->database($dsn); 



       //I'm guessing the error is somewhere around here 
       //because when I comment it out I don't get the 500 error 
       //code anymore and I'm able to log in to the homepage 
       $db = $this->Select_db->thisdb($db_settings); 
      } else { 
       return FALSE; 
      } 
     } else { 

      return 0; 
     } 

Dieses Modell wird beim Einloggen über eine AJAX-Anfrage aufgerufen. Was passiert ist, bekomme ich einen 500 Fehlercode in der Konsole, so dass es einen Fehler geben muss, aber ich kann nicht herausfinden, wo?

Es muss dynamisch sein, also kann ich nicht einfach die Datei datenbank.php in Config auffüllen.

+0

Bitte lesen Sie diese https://codeigniter.com/user_guide/database/configuration.html – Naincy

+0

muss es aber dynamisch sein? weil auf mehrere Datenbanken zugegriffen werden kann. Welcher Zugriff erfolgt, richtet sich nach dem Benutzernamen, der sich erfolgreich angemeldet hat (dies ist bereits abgedeckt). Hauptproblem ist die Verbindung herzustellen. @Naincy – herondale

+0

Sie schreiben das Verbindungsskript und stellen die Verbindung her. Nach erfolgreichem Login eines Benutzers schließen Sie alle anderen DB-Verbindungen (PHP-Funktion) und aktivieren nur das, was Sie wollen. Hoffe, es wird helfen –

Antwort

1

Fügen Sie diese Zeile in database.php in config

/********* For Other Database***********************/ 
    $db['Other']['hostname'] = '192.168.1.191'; 
    $db['Other']['username'] = 'user589'; 
    $db['Other']['password'] = 'pass12345'; 
    $db['Other']['database'] = 'other_db'; 
    $db['Other']['dbdriver'] = 'mysql'; 
    $db['Other']['dbprefix'] = ''; 
    $db['Other']['pconnect'] = TRUE; 
    $db['Other']['db_debug'] = TRUE; 
    $db['Other']['cache_on'] = FALSE; 
    $db['Other']['cachedir'] = ''; 
    $db['Other']['char_set'] = 'utf8'; 
    $db['Other']['dbcollat'] = 'utf8_general_ci'; 
    $db['Other']['swap_pre'] = ''; 
    $db['Other']['autoinit'] = TRUE; 
    $db['Other']['stricton'] = FALSE; 

use 'andere' Datenbank config in Modell

public function get_a_queue() { 
    $otherdb = $this->load->database('Other', TRUE); //loaad second databse 
    $qr = $otherdb ->query("SELECT * from users"); 
    return $qr->result(); 
} 

Hope this helfen Ihnen

+0

Aber ich kann noch nicht vorhersagen, auf welche Datenbank zugegriffen werden muss, da sie vom Benutzernamen des Benutzers abhängt? – herondale

Verwandte Themen