CI double DB

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

John Cena

John Cena

24/06/2013 13:19:10
Quote Anchor link
Ik loop even vast.

Ik wil een extra database gebruiken op basis van de user die ingelogd is. In de tabel users staat welke DB user en PWD ik moet gebruiken (niet geheel save misschien, maar goed).

Models extenden nu een core Model welke CI_Model weer extend.

Op zich gaat dat allemaal goed, maar doe ik nu vanuit een model een query, dan krijg ik een foutmelding:
Quote:
Fatal error: Call to a member function select() on a non-object in /home/jdcrm/domains/jdcrm.nl/public_html/application/models/financial_model.php on line 15


Overigens, vrij veel code, vooral omdat ik denk dat het "relevant" is.
Mijn 'core' model:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php

class JD_Model extends CI_Model
{
    function
__construct()
    {

        parent::__construct();

            /*
             * Get USER Database information
             */

    
            $config['hostname'] = "localhost";
            $config['username'] = $this->getUDbUser(JD_Controller::userId());
            $config['password'] = $this->getUDbPwd(JD_Controller::userId());
            $config['database'] = $this->getUDbUser(JD_Controller::userId());
            $config['dbdriver'] = "mysql";
            $config['dbprefix'] = "";
            $config['pconnect'] = FALSE;
            $config['db_debug'] = TRUE;
            $config['cache_on'] = FALSE;
            $config['cachedir'] = "";
            $config['char_set'] = "utf8";
            $config['dbcollat'] = "utf8_general_ci";
            
            $this->uDb = $this->load->database($config);
    }
    
    function
getUDbUser($user_id)
    {

        $this->db->select('u_db_user');
        $this->db->where('u_id',$user_id);
        
        $q = $this->db->get('users');
        
        if($q->num_rows() == 1){            
            $result = $q->result_object();
            
            return $result[0]->u_db_user;
        }
    }
    
     function
getUDbPwd($user_id)
    {

        $this->db->select('u_db_pwd');
        $this->db->where('u_id',$user_id);
        
        $q = $this->db->get('users');
        
        if($q->num_rows() == 1){            
            $result = $q->result_object();
            
            return $result[0]->u_db_pwd;
        }
    }
}

?>


Extended model die dan vervolgens de foutmelding maakt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class financial_model extends JD_Model
{
    function
getInvoices($limit = null, $offset = null, $selectExtended = FALSE)
    {

  
        //LINE 15:
        $this->uDb->select('fin_invoices.*');
      
        $this->uDb->select('rel_creditor.r_name');
        $this->uDb->join('rel_creditor', 'fin_invoices.f_inv_cId = rel_creditor.r_id');
        $this->uDb->limit($limit, $offset);
        $q = $this->uDb->get('fin_invoices');

        return $q->result_object();
    }

?>


Iemand die mij verder kan helpen?
Gewijzigd op 24/06/2013 13:37:54 door John Cena
 
PHP hulp

PHP hulp

07/01/2025 18:55:55
 
Kris Peeters

Kris Peeters

24/06/2013 13:32:58
Quote Anchor link
Wel, $this->db bestaat niet.
Nergens gedeclareerd, nergens geïnitialiseerd.


Toch niet in de code die je gepost hebt.
En het is ook wat de error report zegt.
Gewijzigd op 24/06/2013 13:34:11 door Kris Peeters
 
John Cena

John Cena

24/06/2013 13:36:29
Quote Anchor link
Kris,

$this->db wordt door standaard CI model geinstantieerd, dus die zal geen problemen op kunnen leveren. Dat weet ik zeker, want ik kan wel gewoon inloggen namelijk.
 
Kris Peeters

Kris Peeters

24/06/2013 13:40:54
Quote Anchor link
De error report zegt (vrij vertaald):
"Op het moment dat je $this->db->select() uitvoert, is $this->db geen object."

Ik kan niet zien wat je niet post. Ik merk gewoon op dat ik precies het zelfde zie als de error reporting zegt.

Toon eens waar je $this->db declareert en hoe die een waarde krijgt.
(Toon ook in welke class dat gebeurt)

-------
EDIT.

Okay, kijk. In de tweede lijn van de constructor gebruik je de methode $this->getUDbUser() al.
Op dat moment is er van ->db nog geen sprake, voor zover ik kan zien.
Dat moet dus gebeuren in de parent constructor, veronderstel ik.


Vooraleer je ->getUDbUser() kan gebruiken, moet ->db al geïnitialiseerd zijn.
Gewijzigd op 24/06/2013 13:53:09 door Kris Peeters
 
John Cena

John Cena

24/06/2013 14:07:28
Quote Anchor link
Kris,

>db wordt door CI geiniteerd (zoals aangegeven). Dat kun je ook zien op line 14 in mijn Core model, die functies geven geen foutmelding.
Pas in het financial model gaat het fout wanneer ik $this->uDb aanroep.
 
Kris Peeters

Kris Peeters

24/06/2013 14:32:44
Quote Anchor link
O, het gaat om ->uDb . Sorry.

Maar verder is het (ongeveer) het zelfde verhaal.
Waar komt ->uDb van (declaratie, initiatie, ...) ?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

24/06/2013 17:07:01
Quote Anchor link
CI zet standaard backticks om de tabel en kolomnamen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$this
->uDb->select('fininvoices.*', false);
?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

24/06/2013 22:23:28
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.