2

I'm using Codeigniter to build a webapp and I received this error:

Fatal error: Call to a member function result_array() on a 
non-object in /var/www/application/controllers/people.php on line 29

This is the people.php class:

public function __construct()
{
    parent::__construct();
}

function People() {

}

function view($id) {
    echo "Hello world " . $id;
}

function all() {
    $this->load->model('people_model', '', TRUE);
    $allContacts = $this->people_model->get_all_contacts();
    $results = array();
    foreach ($allContacts->result_array() as $row) {
        $eachrow = array("personID"=>$row['personID'],"fName"=>$row['fName'],"lName"=>$row['lName'],"phoneNumber"=>"",
            "emailAddress"=>$row['emailAddress'],"address"=>$row['address'],"city"=>$row['city'],"state"=>$row['state'],"zip"=>$row['zip']);
        $results = push_array($results, $eachrow);
    }
    foreach ($results as $row) {
        $phoneData = $this->people_model->get_phone_by_id($row['personID']);
        $phoneNumbers = "";
        foreach ($phoneData->result_array() as $row2) {
            $phoneNumbers = $row2['type'] . " " . $row2['phoneNumber'] . " " . $row2['extension'];
        }
        $results['phoneNumber'] = $phoneNumbers;
    }

    $data['title']="Page Title Goes Here";
    $data['username']="Your Username";

    $this->load->view('header', $data);
    $this->load->view('people_results', $results);
    $this->load->view('footer');
}
}

Here is the people_model class:

function __construct()
{
    // Call the Model constructor
    parent::__construct();
}

function get_all_contacts() {
    $query = $this->db->query('SELECT * FROM person');
    return $query->result();
}

function get_phone_by_id($id) {
    $query = $this->db->query('SELECT * FROM phoneNumber WHERE personID = '.$id);
    return $query->result();
}
}

The only thing I might question in database.php is if the hostname needs a port number, but I don't think that helped when I tried it.

I just tried adding (based on similar question in side bar)

$this->mydb = $this->load->database('realDB', TRUE);

to the people_model and changing the db to mydb and received this error:

You have specified an invalid database connection group.

and this is my line in database.php:

$db['default']['database'] = 'realDB';

Thanks for all your help.

0

1 Answer 1

2

since get_all_contacts is already using the result() function in your model, you can't also use the result_array() function in your controller. result_array() would be a method of the $query object. The quick and dirty way to get this working(which might break other stuff if its also using the get_all_contacts method) would be to change your get all contacts function to the following:

function get_all_contacts() {
    $query = $this->db->query('SELECT * FROM person');
    return $query;
}

however, if you want to be smarter about it and not risk breaking other stuff, you can pass a param from the controller, and only return query if its set like so:

REVISED CONTROLLER LINE**

$allContacts = $this->people_model->get_all_contacts(true);

REVISED MODEL CODE

function get_all_contacts($special = false) {
    $query = $this->db->query('SELECT * FROM person');
    if($special)
    {
        return $query;
    }
    return $query->result();
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.