简体   繁体   中英

Codeigniter/Postgresql: Fatal error: Call to a member function num_rows() on a non-object

This thing is been bothering me of a couple of days and I haven't been able to fix it. I have this registration form. And when submitting this form This error keeps popping up and the reason for this happening is the registration details are not getting inserted into the database.

I am using Postgresql as the database system. But the data is not getting inserted. I am really frustrated with this. I will post my model, controller below, If anything is required please let me know.

Controller:

    function register()
{

    //set validation rules
    $this->form_validation->set_rules('customer_name', 'Customer Name', 'trim|required|xss_clean');
    $this->form_validation->set_rules('address1', 'Address 1', 'trim|required|xss_clean');
    $this->form_validation->set_rules('address2', 'Address 2', 'trim|required|xss_clean');
    $this->form_validation->set_rules('city', 'City', 'trim|required|xss_clean');
    $this->form_validation->set_rules('state', 'State', 'trim|required|xss_clean');
    $this->form_validation->set_rules('country', 'Country', 'trim|required|xss_clean');
    $this->form_validation->set_rules('phone', 'Phone', 'trim|required|xss_clean|is_numeric');
    $this->form_validation->set_rules('mobile', 'Mobile', 'trim|required|xss_clean|is_numeric');
    $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|is_unique[gkb_users.email]');
    $this->form_validation->set_rules('username', 'Username', 'trim|required|is_unique[gkb_users.username]');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|md5');
    $this->form_validation->set_rules('confpassword', 'Confirm Password', 'trim|required|matches[password]|md5');

    //validate form input
    if ($this->form_validation->run() == FALSE)
    {
    //fails
    $this->loadHeader($this);

    //load sidebar
    $this->loadSidebar($this);

    //load middle content
    $this->load->view('register_view'); 

    //load footer
    $this->loadFooter($this);
    }
    else
    {
        //insert the user registration details into database
        $data = array(
            'cust_name' => $this->input->post('customer_name'),
            'address1' => $this->input->post('address1'),
            'address2' => $this->input->post('address2'),
            'city' => $this->input->post('city'),
            'state_code' => $this->input->post('state'),
            'country_code' => $this->input->post('country'),
            'phone' => $this->input->post('phone'),
            'mobile' => $this->input->post('mobile'),
            'email' => $this->input->post('email'),
            'username' => $this->input->post('username'),
            'password' => $this->input->post('password'),
        );

        // insert form data into database
        if ($this->user_model->insertUser($data))
        {
            // send email
            if ($this->user_model->sendEmail($this->input->post('email')))
            {
                // successfully sent mail
                $this->session->set_flashdata('msg','<div class="alert alert-success text-center">You are Successfully Registered! Please confirm the mail sent to your Email-ID!!!</div>');
                redirect('user/register');
            }
            else
            {
                // error
                $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Oops! Error.  Please try again later!!!</div>');
                redirect('user/register');
            }
        }
        else
        {
            // error
            $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Oops! Error.  Please try again later!!!</div>');
            redirect('user/register');
        }
    }
}

Model:

    function insertUser($data)
{
    return $this->db->insert('users', $data);
}

I will be really grateful if I can solve this. Thanks

EDIT:

    public function checkfrontendUser($username,$passwd)
{
    $sql = "
        SELECT * FROM users
        WHERE (
                    `username` = '".$username."'
                    OR
                    `email` = '".$username."'
              )
              AND `password` = '".$passwd."'
    ";      
    $result = $this->db->query($sql);
    if ($result->num_rows() > 0)
    {
        return $result->result_array();
    }       
    return FALSE;
}

Mainly this can happen for database connection problem or your query is failing. No matter how you are connecting your DB whether through database.php or $this->load->database() . double check your Db credentials.

secondly you may check as

if($result !== FALSE){
    if ($result->num_rows() > 0){
        return $result->result_array();
    }  
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM