2

这可能是一个有点愚蠢的问题,但我不明白:

我的模型中有这两个功能

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);
                    }

有没有办法解决或解决这个问题?

4

4 回答 4

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 语句仍然可以以相同的方式工作。

于 2013-01-25T16:28:53.463 回答
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在say中有一个变量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;
}
......
于 2013-01-25T15:30:40.770 回答
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();

正在返回更新、删除或插入时受影响的行

以及相关代码在哪里,以便我们可以看到它。

于 2013-01-25T15:23:00.200 回答
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
}
于 2013-01-25T15:23:48.433 回答