2013-05-15 5 views
1

Я написал функцию, и он работает только с одной стороны:CodeIgniter - не в состоянии запросить базу данных

//Find current upload total value 
$this->EE->db->select('upload_total'); 
$upload_total = $this->EE->db->get_where('exp_competition_purchase_upload_total', array('member_id' => $member_id)); 
return $upload_total->result(); 

// If upload total is more than 0  
if($upload_total > 0) { 
    $new_total = $upload_total + $my_data['upload_total']; 
    $my_data['upload_total'] = $new_total; 
} 

Может кто-нибудь сказать мне, если они могут увидеть любой вопрос с этой конкретной частью коды?

Вот полная функция. Он работает в расширении. Расширение работает, оно, как представляется, является приведенным выше кодом, который не является.

Я просто пытаюсь найти значение в db, тогда, если значение больше одного, добавьте значение в другое.

function cartthrob_on_authorize() 
{ 
    foreach ($this->EE->cartthrob->cart->items() as $item) { 

     // Create array to store member id and purchased upload slots 
     $my_data = array(
      'member_id' => $this->EE->session->userdata('member_id'), 
      'upload_total' => $item->item_options('fees'), 
     ); 

     // Store member id in variable 
     $member_id = $my_data['member_id']; 

     // Query table to check if there is record with member id exists 
     $query = $this->EE->db->get_where('exp_competition_purchase_upload_total', array('member_id' => $member_id)); 

     // If query returns more than 0 update record 
     if($query->num_rows() > 0) { 

      //Find current upload total value 
      $this->EE->db->select('upload_total'); 
      $upload_total = $this->EE->db->get_where('exp_competition_purchase_upload_total', array('member_id' => $member_id)); 

      // If upload total is more than 0  
      if($upload_total > 0) { 

       $new_total = $upload_total + $my_data['upload_total']; 

       $my_data['upload_total'] = $new_total; 

      } 

      return $upload_total->result(); 

      $this->EE->db->where('member_id', $member_id); 
      $this->EE->db->update('exp_competition_purchase_upload_total', $my_data); 

     // If query returns 0 insert new record   
     } else { 

      $this->EE->db->insert('exp_competition_purchase_upload_total', $my_data); 

     } 
    } 
} 
+2

Да, вы не можете запустить код после возврата u ... 'return $ upload_total-> result();' должно быть сделано после устного условного оператора – mic

+0

, вы уверены, что у вас есть результат из db, когда вы вызываете '$ this-> EE-> db'? – rcpayan

+0

micb: если я добавлю его после ошибки: объект класса CI_DB_mysql_result не может быть преобразован в int. – ccdavies

ответ

1
//Find current upload total value 
$this->EE->db->select('upload_total'); 
$upload_total = $this->EE->db->get_where('exp_competition_purchase_upload_total', array('member_id' => $member_id))->result_array(); 
$upload_total = $upload_total[0]; 
//If upload total is more than 0 
$upload_total_col = $upload_total['upload_total']>0 ? $upload_total['upload_total']:0; 
$my_data['upload_total'] += $upload_total_col; 

Из того, что я вас понимаю, просто хочу увеличить upload_total.

Примечание: Не используйте return $upload_total->result(); между вашей функцией, не помещая условие.

+0

Для if ($ upload_total-> num_rows()> 0) {Я не хочу подсчитывать строки. Я хочу посмотреть, больше ли значение в столбце upload_total, чем 1. Я добавил полный код в свой пост с более подробным объяснением чуть выше. – ccdavies

+0

@ccdavies '$ upload_total-> num_rows()> 0' -> Это проверит, вернул ли запрос какое-либо значение из db. Если вы хотите проверить значение столбца upload_total, проверьте мое редактирование ... –

+0

Спасибо. Я просто попробовал, и он возвращает: вызов функции-члена num_rows() на не-объекте – ccdavies

0

здесь решение

$this->EE->db->select('upload_total'); 
$upload_total = $this->EE->db->get_where('exp_competition_purchase_upload_total',  array('member_id' => $member_id)); 

// If upload total is more than 0  
if($upload_total->num_rows() > 0) { 
    $result = $upload_total->row_array(); 
    $new_total = $result['upload_total'] + $my_data['upload_total']; 
    $my_data['upload_total'] = $new_total; 
} 
return $my_data; 

попробовать. это было потому, что вы пытались использовать возвращаемый объект DB как int.

+0

стр. я не тестировал его, но он должен указывать u по правильному пути :) – mic

+0

'$ result + $ my_data ['upload_total'];' -> Вы пытаетесь добавить массив с некоторым целым значением ... Он также делает та же ошибка, что и в его случае его объект ... –

+0

ах хорошо пятнистый lol ... не то, что я бы пропустил нормально: P – mic

0

результат запроса не является целым числом, это объект

попробовать, как это;

//Find current upload total value 
$this->EE->db->select('upload_total'); 
$upload_total = $this->EE->db->get_where('exp_competition_purchase_upload_total', array('member_id' => $member_id)); 

$result = $upload_total->result(); 

// If upload total is more than 0  
if($upload_total->num_rows() > 0) { 
    $my_data['upload_total'] += $result->upload_total; 
} 

return $my_data; 

Кстати, я не уверен, что вы хотите сделать, поэтому я только что исправил его!

Смежные вопросы