php - into - Codeigniter: estoy buscando usar/conectarme a una base de datos diferente para uno de mis controladores y un modelo
save data to database codeigniter (3)
Estoy buscando usar / conectarme a una base de datos diferente para uno de mis controladores y un modelo. Publiqué esta audiencia ya que en los foros de CI no recibo respuesta.
Añadí esto en database.php:
$db[''tdb''][''hostname''] = "localhost";//localhost
$db[''tdb''][''username''] = "username";//root
$db[''tdb''][''password''] = "password";//empty
$db[''tdb''][''database''] = "databasename";
$db[''tdb''][''dbdriver''] = "mysql";
$db[''tdb''][''dbprefix''] = "";
$db[''tdb''][''pconnect''] = FALSE;
$db[''tdb''][''db_debug''] = FALSE;
$db[''tdb''][''cache_on''] = FALSE;
$db[''tdb''][''cachedir''] = "";
$db[''tdb''][''char_set''] = "utf8";
$db[''tdb''][''dbcollat''] = "utf8_general_ci";
Esto como mi modelo:
<?php
class Tadmin_model extends Model{
function Tadmin_model(){
parent::Model();
$tdb = $this->load->database(''tdb'', TRUE);
}
function FInsert($usernames){
$query = $tdb->query("SELECT * FROM following");
return $query->row();
}
}
?>
Y este es el comienzo de mi controlador:
<?php
class Tadmin extends Controller{
function Tradmin(){
parent::Controller();
$this->load->model(''tadmin_model'');
Y obtengo este error:
Se ha encontrado un error PHP
Gravedad: aviso
Mensaje: variable indefinida: tdb
Nombre de archivo: modelos / tadmin_model.php
Número de línea: ...
Error fatal: Llamar a una consulta de función miembro () en un objeto no disponible en /blablabla/tadmin_model.php en línea ...
¿Qué estoy haciendo mal aquí?
¿Has intentado cargar $ tdb dentro de la función FInsert? Parece que $ tdb puede ser una variable local y no puede accederse mediante FInsert ...
Su problema aquí no es con el uso de las funciones de la base de datos de CodeIgniter, sino con el alcance variable en las clases. Cuando carga su modelo, se conecta a la base de datos y asigna el resultado a una variable local en el constructor del modelo. Cuando cualquier función finaliza, las variables locales se descartan. Más tarde intenta llamar al método query () en la variable $ tdb que ya se ha descartado y obtiene un error.
Debe almacenar los resultados de $ this-> load-> database () en una ubicación que esté disponible tanto para el constructor como para el método. Podría mover la llamada $ this-> load-> database () al método del controlador y conectarse a la otra base de datos cada vez que llame al método Tradmin en su modelo.
De otro modo, si desea que $ tdb esté disponible para todos los métodos en el modelo, use una variable miembro en la clase, que se vería así ...
<?php
class Tadmin_model extends Model{
var $tdb;
function Tadmin_model(){
parent::Model();
$this->tdb = $this->load->database(''tdb'', TRUE);
}
function FInsert($usernames){
$query = $this->tdb->query("SELECT * FROM following");
return $query->row();
}
}
?>
Espero que ayude.
Jim.
tdb necesita definirse fuera del alcance del constructor, es decir, como miembro de clase como:
class Tadmin_model extends Model {
var $tdb;
function Tadmin_model() {
parent::Model();
$this->tdb = $this->load->database(''tdb'', TRUE);
}
}