这可能是一个有点愚蠢的问题,但我不明白:
我的模型中有这两个函数
public function count()
{
return $this->db->num_rows();
}
public function changes()
{
return $this->db->affected_rows();
}
当我在控制器中调用changes();
时,它会显示最后一次(更新)查询的受影响行。当我使用count();
显示最后一个(选择)查询的行时,我收到错误..
控制器中的代码是这样的:
if (!$this->synchronization_model->get_contact_knowledge($contact['account_id'], SERVER_LOCATION_ID)) {
throw new Exception("Failed to update knowledge");
}
if( $this->synchronization_model->count() == 0) {
$this->synchronization_model->insert_knowledge($contact['account_id'], $contact_server_time);
}
有没有办法解决或解决这个问题?
答案 0 :(得分:1)
num_rows()
不是db
类的方法。它应该针对resultset
对象进行调用。
$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_rows();
如您所见,我们不会致电$this->db->num_rows()
而是致电$query->num_rows();
作为一种解决方法,您可以将查询对象传递给count()
方法,如下所示:
public function count($query)
{
return $query->num_rows();
}
<强>更新强>
根据您更新的代码,我建议如下:
我假设查询是在synchronization_model
中执行的。在那种情况下,你应该做的是。请synchronization_model
中的变量说row_count
。并将num_rows()
返回的值放入此变量中。 count()
中的内容只返回此变量。所以它会是这样的:
内部synchronization_model
:
......
$query = $this->db->query('SELECT * FROM my_table');
$this->row_count = $query->num_rows();
......
public function count()
{
return $this->row_count;
}
......
答案 1 :(得分:1)
以下是我如何正确修复此问题。
而不是这个功能:
public function check_account_already_exists($email_address)
{
if ($query = $this->db->query('SELECT * FROM account WHERE email_address = ?', array($email_address)))
{
return true;
}
}
我有这个功能:
public function check_account_already_exists($email_address)
{
if ($query = $this->db->query('SELECT * FROM account WHERE email_address = ?', array($email_address)))
{
return $query;
}
}
所以当我在控制器中调用它时:
// Check whether the e-mail address has not already been taken
if (!($count = $this->account_model->check_account_already_exists($email_address))) {
throw new Exception("Failed to fetch account");
}
$this->account_model->count($count);
我可以这样使用..这样,上面的if语句仍然可以以相同的方式工作。
答案 2 :(得分:0)
$this->db->num_rows();
返回结果在选择时获取的数量的行数,您将需要使用此作为
$query = $this->db->get('table');
OR
$query = $this->db->query('select * from table');
$query->num_rows();
return $this->db->affected_rows();
返回更新,删除或插入时受影响的行
相关代码在哪里,以便我们可以看到它。
答案 3 :(得分:0)
在CodeIgniter中,num_rows()
函数是查询对象的方法,而不是数据库对象...请参阅http://ellislab.com/codeigniter/user-guide/database/results.html
例如,您可以通过以下方式使用num_rows()
:
$query = $this->db->query("SELECT * FROM some_table WHERE some_col = 'blah'");
if($query->num_rows()){
//yay, data!
} else {
//no data for you
}