所以我有一张如下表:
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
}
是因为我的列标题是数字吗?
答案 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'"