2016-03-26 1 views
1

Я использую Codeigniter 3.0.4 + PostgreSql через PDO. Я просто хочу получить количество строк, которые я только что обновил. Связанные вырезанные из модели:

public function some_count_update($sid) 
{ 
    $this->db->set('some_field', 'some_field+1', FALSE); 
    $this->db->where('id', $sid, FALSE); 
    $this->db->update('some_table'); 
    $this->db->affected_rows(); 
    return ($this->db->num_rows()>0) ? true : false; 
} 

PHP возвращает ошибку:

Fatal error: Call to undefined method CI_DB_postgre_driver::num_rows() in ... 

Я полагаю, что проблема в том, что CI использует функцию PHP num_romws(), но для Postgres, PHP имеет специальную функцию pg_num_rows() , Я попытался изменить системный класс CI (DB_result> num_rows(), добавленный префикс «pg_»), но это не помогает.

ответ

1

Для проверки затронутых строк используется обновление $this->db->affected_rows() вместо $this->db->num_rows() И ваше имя колонки в задней тик

public function some_count_update($sid) 
{ 
    $this->db->set('some_field', '`some_field`+1', FALSE);// column name in backtick 
    $this->db->where('id', $sid);// remove false 
    $this->db->update('some_table'); 
    return ($this->db->affected_rows()>0) ? true : false;// use affected_rows 
} 

Read https://www.codeigniter.com/user_guide/database/examples.html

+0

гм, на самом деле , почему я попытался проверить num_rows(), если я могу использовать affected_rows()? Thx для помощи, это работает! p.s: это был глупый вопрос, я знаю :) – deeplay

+0

кстати: в этом проекте я не использую mysql, postgresql не распознает имена полей, когда они находятся в backticks. – deeplay

0

Это будет хорошо :)

return ($this->db->where('id', $sid)->get('some_table')->num_rows()>0) ? true : false;