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.
Bitte lesen Sie diese https://codeigniter.com/user_guide/database/configuration.html – Naincy
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
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 –