未定义的偏移量:0 - Codeigniter

时间:2013-06-22 16:48:20

标签: php codeigniter

当我向本页发送请求包括POST-DATA({“bot_hw_id”:“2147483647”})时,我收到以下错误:

<p>Severity: Notice</p>
<p>Message:  Undefined offset: 0</p>
<p>Filename: models/prometheus_model.php</p>
<p>Line Number: 26</p>

我的代码:

Controller(update_bot function):
[code]public function update_bot()
 {
  $bot_data = json_decode($this->input->post('bot_data'));
  $to_update = array(
  'bot_last_update' => time(),
  'bot_ip' => $_SERVER['REMOTE_ADDR'],
  'bot_port' => $_SERVER['REMOTE_PORT']
  );
  $bot_data = $this->prometheus_model->get_bot_data_by_hw_id(/*$bot_data->{'bot_hw_id'}*/$bot_data->{'bot_hw_id'});
  //echo $bot_data['bot_id'];
  print_r($bot_data);
  $this->prometheus_model->update('bots', array('bot_id' => $bot_data['bot_id']), $to_update);
  //var_dump($bot_data);


 }

模型(prometheus_model):

<?php
class Prometheus_model extends CI_Model {

 var $tables = array(
  'bots' => 'bots'
 );

 function __construct() {
  parent::__construct();
 }

 public function tablename($table = NULL) {
  if(! isset($table)) return FALSE;
  return $this->tables[$table];
 }

 public function get($table, $where = array(), $single = FALSE, $order = NULL) {
  $this->db->where($where);
  if(isset($order)) {
   $this->db->order_by($order);
  }
  $q = $this->db->get_where($this->tablename($table),$where);

  $result = $q->result_array();
  if($single) {
   return $result[0];
  }
  return $result;
 }

 public function update($table, $where = array(), $data) {
  $this->db->update($this->tablename($table),$data,$where);
  return $this->db->affected_rows();
 }

 public function insert($table, $data) {
  $this->db->insert($this->tablename($table),$data);
  return $this->db->insert_id();
 }

 public function delete($table, $where = array()) {
  $this->db->delete($this->tablename($table),$where);
  return $this->db->affected_rows();
 }

 public function explicit($query) {
  $q = $this->db->query($query);
  if(is_object($q)) {
   return $q->result_array();
  } else {
   return $q;
  }
 }

 public function num_rows($table, $where = NULL) {
  if(isset($where)){
  $this->db->where($where);
  }
  $q = $this->db->get($table);
  return $q->num_rows();
 }

 public function get_bot_data_by_hw_id($bot_hw_id) {
  $q = $this->get('bots', array('bot_hw_id' => $bot_hw_id), TRUE);
  return $q;
 }

}

?>;

如何解决此错误?

1 个答案:

答案 0 :(得分:1)

首先,我要提一下,在没有任何进程的情况下(正如我们在代码中看到的那样)完全查询用户输入并不是一个好的和安全的想法。最好至少为每个表设置不同的模型。

总之...

这样你的功能就会得到纠正:

 public function get($table, $where = array(), $single = FALSE, $order = NULL) {
  $this->db->where($where);
  if(isset($order)) {
   $this->db->order_by($order);
  }
  $q = $this->db->get_where($this->tablename($table),$where);

  $result = $q->result_array();
  // You should use $q->num_rows() to detect the number of returned rows
  if($q->num_rows() == 1) {
   // Return the first row:
   return $result[0];
  }
  return $result;
 }

只有一行时返回第一行,$q->num_rows()不等于1时返回数组。

希望有所帮助