PHP致命错误:使用SQL子查询时,对非对象结果\数组()调用成员函数row()
我使用的是WAMP服务器2.4。 我试图获取数据库中不同月份的计数,但出现以下错误“调用非对象结果_array()上的成员函数row()”。这是我的模型类代码PHP致命错误:使用SQL子查询时,对非对象结果\数组()调用成员函数row(),php,mysql,codeigniter,Php,Mysql,Codeigniter,我使用的是WAMP服务器2.4。 我试图获取数据库中不同月份的计数,但出现以下错误“调用非对象结果_array()上的成员函数row()”。这是我的模型类代码 public function get_current_month() { $this->db->select('(COUNT(DISTINCT Month))' ); $this->db->from('site_data'); $this->db->where('year
public function get_current_month()
{
$this->db->select('(COUNT(DISTINCT Month))' );
$this->db->from('site_data');
$this->db->where('year =(');
$this->db->select('MAX(year )');
$this->db->from('site_data)');
$query = $this->db->get();
return $query->result_array(); //error here
}
我相信这与代码中的子查询有关,因为当我使用它时
public function get_current_month()
{
$this->db->select('(COUNT(DISTINCT Month))' );
$this->db->from('site_data');
$this->db->where('year =2013');
//$this->db->select('MAX(year )');
//$this->db->from('site_data)');
$query = $this->db->get();
return $query->result_array();
}
它工作得很好。
我正在使用codeigniter
有人知道这里出了什么问题吗
这是我在数据库中测试的查询,它工作得非常好
SELECT (COUNT(DISTINCT MONTH))
FROM site_data
WHERE YEAR = (
SELECT MAX(YEAR)
FROM site_data
)
看起来您要么需要手工将子查询编入
->where()
调用,要么使用某种第三方库。看看哪一个处理类似的问题。我对CI的经验不多,但很明显,您试图通过嵌套db->select等来调用子查询的方式不太正确。
可能有一种方法可以建立子查询,但是
为了简单起见,您可以尝试以下方法:
public function get_current_month()
{
$this->db->select('(COUNT(DISTINCT Month))' );
$this->db->from('site_data');
$this->db->where('year =( SELECT MAX(year) FROM site_data)');
$query = $this->db->get();
return $query->result_array(); //error here
}
如果可行,为什么要把它弄得更复杂呢?谢谢大家。
我认为添加一个函数可以很容易地从数据库中获取最大值(年份),然后将值传递给我的函数
我是这样解决的
public function get_current_month($Year)
{
$MAXYear=$Year;
$this->db->select('(COUNT(DISTINCT Month))' );
$this->db->from('site_data');
$this->db->where('year',$MAXYear);
$query = $this->db->get();
return $query->result_array();
}
其中year是我从controller传递的值,用于获取当前月份()
它很有魅力
非常感谢您的所有建议。对于CI来说,情况并非如此。请看一下,因为它可能会帮助您包含子查询。
$this->db->select()
接受可选的第二个参数。若您将其设置为FALSE,CodeIgniter将不会尝试用反勾号保护您的字段或表名。如果需要复合select语句,这将非常有用。