phpcodeignitermodel-view-controllermysql-num-rows

How to retrieve the number of rows from a CodeIgniter query with a WHERE clause


Is there a better way of retrieving the number of rows from a table? Currently I have this which is also returning an error if there are no results:

Error:

A PHP Error was encountered

<p>Severity: Notice</p>
<p>Message:  Undefined property: Home::$count</p>
<p>Filename: core/Model.php</p>
<p>Line Number: 51</p>

</div>{"status":"ok","content":""}

Controller

public function do_messages()
{
    $this->load->model('message_model');
    $user_id = $this->input->post('user_id');
    $this->message_model->unread_msg($user_id);
    $mess = $this->message_model->unread_msg_count();
    if (isset($mess)) {
        $result = array('status' => 'ok', 'content' => $mess);
        echo json_encode($result);
        exit();
    } else {
        $result = array('status' => 'ok', 'content' => '');
        echo json_encode($result);
        exit();
    }
}

Model:

function unread_msg($user_id)
{
    $query_str = "SELECT id FROM messages WHERE view = 0 AND dest = ?";
    $query = $this->db->query($query_str, $user_id);

    if ($query->num_rows() > 0) {
        $this->count = $query->num_rows();
    }
}

function unread_msg_count()
{
    return $this->count;
}

js file:

function get_messages()
{
    $.post(base_url + "index.php/home/do_messages", { user_id : user_msg }, function(data) {
        if (data.status == 'ok') {
            $(".new_msg").removeClass('hide').html(data.content);
        } else {

        }
    }, "json");
}
get_messages();

Solution

  • Try this:

    public function do_messages()
        {
                $this->load->model('message_model');
                $user_id = $this->input->post('user_id');
                $this->message_model->unread_msg($user_id);
                $mess = $this->message_model->unread_msg_count();
                        if($mess != false){
                                $result = array('status' => 'ok', 'content' => $mess);
                                echo json_encode($result);
                                exit();
                        }else{
                                $result = array('status' => 'ok', 'content' => '');
                                echo json_encode($result);
                                exit();
                        }
        }
    

    Model:

    function unread_msg($user_id)
        {
                $query_str = "SELECT id FROM messages WHERE view = 0 AND dest = ?";
                $query = $this->db->query($query_str, $user_id);
    
                if($query->num_rows() > 0)
                {
                        return $query->num_rows();
                } else {
                        return false;
                }
        }
        function unread_msg_count()
        {
        return $this->count;
        }