Codeigniter在数字列上返回单行

时间:2014-03-12 19:52:53

标签: php mysql codeigniter

所以我有一张如下表:

Day      | 2 | 4 | 6 |8 |10 | 12 | 14 | 16| 
-------------------------------------------
3/12/2014| 0 | 0 | 1 |1 | 1 | 1  | 0  | 1 |

我的查询是

SELECT `14` FROM (`Time_clock`) WHERE `Day` = '03/12/2014'

我的查询返回0,这是正确的。

但是我无法绑定并返回我得到Undefined property: stdClass::$14

的结果

当我尝试这样做时,我只想要单行结果[0]:

    $this->db->select($current_hour);
    $this->db->from('Time_clock');
    $this->db->where('Day',$Todays_Date);
    $query = $this->db->get();      
            if ($query->num_rows() > 0)
            {
            $row = $query->row(); 
            return $row->$current_hour; //error in this line
            }

是因为我的列标题是数字吗?

4 个答案:

答案 0 :(得分:1)

列名数字肯定是一个好主意,因为以数值开头并不是一个有效的标识符,当你试图获得像$row->$current_hour这样的对象属性时,会给出你的错误,其中$current_hour包含属性名称这是数字,它是无效的属性名称。但您仍然可以通过更改代码来获取数据,如下所示

在你的选择中添加“`”以保护mysql的标识符,就好像CI看到它的一个数字,它认为你在select上传递了一个默认值,所以它忽略了标识符保护,你也总是得到列名作为值

    $this->db->select("`$current_hour`");
    $this->db->from('Time_clock');
    $this->db->where('Day', $Todays_Date);
    $query = $this->db->get();
    if ($query->num_rows() > 0) {
        $row = $query->row_array(); // get as array 
        return $row[$current_hour]; //user array index instant of object property 
    }

strongly建议在您的表格列上添加前缀,即hour_2, hour_3, ...

并像这样使用$this->db->select("hour_$current_hour");

答案 1 :(得分:1)

更好的设计可能看起来像这样......

Date       | Hour | Flag
2014-12-03 |  2   |   0
2014-12-03 |  4   |   0
2014-12-03 |  6   |   1
2014-12-03 |  8   |   1
2014-12-03 | 10   |   1
2014-12-03 | 12   |   1
2014-12-03 | 14   |   0
2014-12-03 | 16   |   1

......或者......

Datetime              |  Flag
2014-12-03 02:00:00   |   0
2014-12-03 04:00:00   |   0
2014-12-03 06:00:00   |   1
2014-12-03 08:00:00   |   1
2014-12-03 10:00:00   |   1
2014-12-03 12:00:00   |   1
2014-12-03 14:00:00   |   0
2014-12-03 16:00:00   |   1

答案 2 :(得分:0)

更改

return $row->$current_hour; 

$value = $row->current_hour;

return $value;

第二个$让你搞砸了。

**它区分大小写,因此请严格匹配db **

中的列标题

答案 3 :(得分:0)

尝试此命令:

SELECT 14 FROM table_name WHERE date(Day)="'2014/03/02'"