[php] difference between $query>num_rows() and $this->db->count_all_results() in CodeIgniter & which one is recommended

In a scenario I need to know the count of recordset a query will return, which in codeigniter can be done by $query->num_rows() or $this->db->count_all_results(). Which one is better and what is the difference between these two?

This question is related to php codeigniter

The answer is


$this->db->count_all_results is part of an Active Record query (preparing the query, to only return the number, not the actual results).

$query->num_rows() is performed on a resultset object (after returning results from the DB).


Simply as bellow;

$this->db->get('table_name')->num_rows();

This will get number of rows/records. however you can use search parameters as well;

$this->db->select('col1','col2')->where('col'=>'crieterion')->get('table_name')->num_rows();

However, it should be noted that you will see bad bad errors if applying as below;

$this->db->get('table_name')->result()->num_rows();

$sql = "select count(*) as row from login WHERE firstname = '" . $username . "' AND password = '" . $password . "'";
    $query = $this->db->query($sql);
    print_r($query);exit;
    if ($query->num_rows() == 1) {
    return true;
    } else {
    return false;
    }

Total number of results

$this->db->count_all_results('table name');

Which one is better and what is the difference between these two Its almost imposibble to me, someone just want to get the number of records without re-touching or perform another query which involved same resource. Furthermore, the memory used by these two function is in same way after all, since with count_all_result you still performing get (in CI AR terms), so i recomend you using the other one (or use count() instead) which gave you reusability benefits.


We can also use

return $this->db->count_all('table_name');  

or

$this->db->from('table_name');
return $this->db->count_all_result();

or

return $this->db->count_all_result('table_name');

or

$query = $this->db->query('select * from tab');  
return $query->num_rows();

There are two ways to count total number of records that the query will return. First this

$query = $this->db->query('select blah blah');  
return $query->num_rows();

This will return number of rows the query brought.

Second

return $this->db->count_all_results('select blah blah');

Simply count_all_results will require to run the query again.