获取所有现有行的PHP MVC查询只返回1行

获取所有现有行的PHP MVC查询只返回1行,php,model-view-controller,Php,Model View Controller,我有一个工作查询,但它只返回1行-我可以在哪里或做什么来返回所有现有行 型号: public function getInfo() { $info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW()

我有一个工作查询,但它只返回1行-我可以在哪里或做什么来返回所有现有行

型号:

    public function getInfo() {

    $info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");

    if ($info_query->num_rows){
        return array(
            'info_id'       => $info_query->row['info_id'],
            'name'          => $info_query->row['name'],
            'amount'        => $info_query->row['amount'],
            'date_start'    => $info_query->row['date_start'],
            'date_end'      => $info_query->row['date_end'],
            'status'        => $info_query->row['status'],
            'date_added'    => $info_query->row['date_added']
        );
    }

}
$data = [];    

if ($info_query->num_rows){
    foreach ($info_query->result() as $row) {
        $data[] = array(
            'info_id'       => $row['info_id'],
            'name'          => $row['name'],
            'amount'        => $row['amount'],
            'date_start'    => $row['date_start'],
            'date_end'      => $row['date_end'],
            'status'        => $row['status'],
            'date_added'    => $row['date_added']
        );
    }

    return $data;
}
在控制器中尝试foreach()时,仍然只得到一行:

        foreach ($info_options as $info) {
            var_dump($info_options['name']);exit;
            //var_dump($info_options['name']); results: Warning: Illegal string offset 'name' 
        }
在模型中,当我转储时:
$info\u query
我得到了9——这是我所期望的所有行


不太确定我遗漏了什么或做错了什么。

你没有重复结果。不在模型中,也不在控制器中。虽然我不知道你为什么要做两次。也许我只是不理解你的代码

型号:

    public function getInfo() {

    $info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");

    if ($info_query->num_rows){
        return array(
            'info_id'       => $info_query->row['info_id'],
            'name'          => $info_query->row['name'],
            'amount'        => $info_query->row['amount'],
            'date_start'    => $info_query->row['date_start'],
            'date_end'      => $info_query->row['date_end'],
            'status'        => $info_query->row['status'],
            'date_added'    => $info_query->row['date_added']
        );
    }

}
$data = [];    

if ($info_query->num_rows){
    foreach ($info_query->result() as $row) {
        $data[] = array(
            'info_id'       => $row['info_id'],
            'name'          => $row['name'],
            'amount'        => $row['amount'],
            'date_start'    => $row['date_start'],
            'date_end'      => $row['date_end'],
            'status'        => $row['status'],
            'date_added'    => $row['date_added']
        );
    }

    return $data;
}
控制器:

        $info_options = $this->model_extension_total_info->getInfo();

    if ($info_options){
        $json['info_options'] = array();

        $json['info_options'][] = array(
            'info_id'     => $info_options['info_id'],
            'name'          => $info_options['name'],
            'amount'        => $info_options['amount'],
            'date_start'    => $info_options['date_start'],
            'date_end'      => $info_options['date_end'],
            'status'        => $info_options['status'],
            'date_added'    => $info_options['date_added']
        );
    }
$info_options = $this->model_extension_total_info->getInfo();
$json['info_options'] = array();

if ($info_options){
    foreach ($info_options as $info) {

        $json['info_options'][] = array(
            'info_id'     => $info['info_id'],
            'name'          => $info['name'],
            'amount'        => $info['amount'],
            'date_start'    => $info['date_start'],
            'date_end'      => $info['date_end'],
            'status'        => $info['status'],
            'date_added'    => $info['date_added']
        );
    }
}
从技术上讲,你根本不需要循环。你可以:

public function getInfo() {

    $info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");

    if ($info_query->num_rows){
        return $info_query->result();
    }
    else
    {
        return false;
    }
}

你不是在重复结果。不在模型中,也不在控制器中。虽然我不知道你为什么要做两次。也许我只是不理解你的代码

型号:

    public function getInfo() {

    $info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");

    if ($info_query->num_rows){
        return array(
            'info_id'       => $info_query->row['info_id'],
            'name'          => $info_query->row['name'],
            'amount'        => $info_query->row['amount'],
            'date_start'    => $info_query->row['date_start'],
            'date_end'      => $info_query->row['date_end'],
            'status'        => $info_query->row['status'],
            'date_added'    => $info_query->row['date_added']
        );
    }

}
$data = [];    

if ($info_query->num_rows){
    foreach ($info_query->result() as $row) {
        $data[] = array(
            'info_id'       => $row['info_id'],
            'name'          => $row['name'],
            'amount'        => $row['amount'],
            'date_start'    => $row['date_start'],
            'date_end'      => $row['date_end'],
            'status'        => $row['status'],
            'date_added'    => $row['date_added']
        );
    }

    return $data;
}
控制器:

        $info_options = $this->model_extension_total_info->getInfo();

    if ($info_options){
        $json['info_options'] = array();

        $json['info_options'][] = array(
            'info_id'     => $info_options['info_id'],
            'name'          => $info_options['name'],
            'amount'        => $info_options['amount'],
            'date_start'    => $info_options['date_start'],
            'date_end'      => $info_options['date_end'],
            'status'        => $info_options['status'],
            'date_added'    => $info_options['date_added']
        );
    }
$info_options = $this->model_extension_total_info->getInfo();
$json['info_options'] = array();

if ($info_options){
    foreach ($info_options as $info) {

        $json['info_options'][] = array(
            'info_id'     => $info['info_id'],
            'name'          => $info['name'],
            'amount'        => $info['amount'],
            'date_start'    => $info['date_start'],
            'date_end'      => $info['date_end'],
            'status'        => $info['status'],
            'date_added'    => $info['date_added']
        );
    }
}
从技术上讲,你根本不需要循环。你可以:

public function getInfo() {

    $info_query = $this->db->query("SELECT * FROM `km_info` WHERE ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) AND status = '1'");

    if ($info_query->num_rows){
        return $info_query->result();
    }
    else
    {
        return false;
    }
}

是否需要在这两种情况下循环?当我添加控制器循环时,我得到所有变量的
警告:非法字符串偏移量'variable\u name'
。现在就去试试模型钻头;我想你已经编辑了,因为我最初看到这篇博文是的,对不起,这是codeigniter,对吗?我已经有一点没用它了。你不必循环两次,你的代码看起来就像你在做同样的事情两次。您只需将控制器中的$info_选项传递到您的视图,我不知道您为什么要将其重新打包到数组中。不,Opencart,但这不是本机代码。。这就是我寻求帮助的原因。正在尝试添加当前不存在的功能。你说你可以将控制器中的$info_选项直接传递到你的视图是什么意思,我不知道你为什么要将它重新打包到阵列中——我还在通过MVC学习。控制器代码产生了同样的错误。坦白地说,你根本不需要循环任何东西。我会更新我的答案。我认为Opencart中有什么东西干扰了这一点。。当我运行更新的代码时,仍然会得到非法的字符串偏移量<代码>变量转储($info\u query->rows);退出向我显示我试图获取的所有内容。当我添加foreach()循环时,错误消失了,但仍然只有一个结果。困惑不解。是否需要两个都循环?当我添加控制器循环时,我得到所有变量的
警告:非法字符串偏移量'variable\u name'
。现在就去试试模型钻头;我想你已经编辑了,因为我最初看到这篇博文是的,对不起,这是codeigniter,对吗?我已经有一点没用它了。你不必循环两次,你的代码看起来就像你在做同样的事情两次。您只需将控制器中的$info_选项传递到您的视图,我不知道您为什么要将其重新打包到数组中。不,Opencart,但这不是本机代码。。这就是我寻求帮助的原因。正在尝试添加当前不存在的功能。你说你可以将控制器中的$info_选项直接传递到你的视图是什么意思,我不知道你为什么要将它重新打包到阵列中——我还在通过MVC学习。控制器代码产生了同样的错误。坦白地说,你根本不需要循环任何东西。我会更新我的答案。我认为Opencart中有什么东西干扰了这一点。。当我运行更新的代码时,仍然会得到非法的字符串偏移量<代码>变量转储($info\u query->rows);退出向我显示我试图获取的所有内容。当我添加foreach()循环时,错误消失了,但仍然只有一个结果。困惑的