Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP致命错误:使用SQL子查询时,对非对象结果\数组()调用成员函数row()_Php_Mysql_Codeigniter - Fatal编程技术网

PHP致命错误:使用SQL子查询时,对非对象结果\数组()调用成员函数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

我使用的是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 =(');
    $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语句,这将非常有用。