将 Mysql 结果对象转换为关联数组 (CodeIgniter)

问题描述 投票:0回答:4

我正在尝试获取一个数据库查询,它是一个转换为关联数组的对象,以便我可以在 codeigniter 的日历类中使用它。

这是我的模型:

<?php

class Get_diary_model extends Model {
    
    function getAllDiaries($year,$month) {
        
        $data = $this->db->query("SELECT day AND entry FROM diary WHERE month=$month AND year=$year"); // the entries for the relevant month and year
        
        foreach($data->result_array() as $row) { // return result as assoc array to use in calendar
            echo $row['day'];
            echo $row['entry'];
        }

        return $data;
        }
    }

这是我得到的错误:

Fatal error: Cannot use object of type CI_DB_mysql_result as array in C:\wamp\www\mm\system\libraries\Calendar.php on line 219
php mysql codeigniter
4个回答
6
投票

观看这个视频教程,它会对您有所帮助 -> http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-the-calendar-library/

您的模型应如下所示:

    function getAllDiaries($year,$month)
    {
        $q = $this->db->query("SELECT day AND entry FROM diary WHERE month=$month AND year=$year");

        if($q->num_rows() > 0):
            foreach($q->result() as $row):
                $data[] = $row;
            endforeach;
            return $data;
        else:
            return false;
        endif;
    }

和您的控制器:

    function index($year = null, $month = null)
    {
        $this->load->model('Get_diary_model');

        if (!$year) {
            $year = date('Y');
        }
        if (!$month) {
            $month = date('m');
        }

        $data['calendar'] = $this->Get_diary_model->getAllDiaries($year, $month);
}

3
投票

问题不在于你使用 result_array() ,更多的是你后来直接返回 $data 。 $query = $this->db->query() 然后在 foreach 中使用 $query->result_array() 。然后你可以在 foreach 中构建 $data 后返回它。

另一个答案是冗长的写法:

function getAllDiaries($year,$month)
{
    $sql = "SELECT day AND entry FROM diary WHERE month=$month AND year=$year";
    return $this->db->query($sql)->result();
}

但是当然,这将返回一个对象数组,而不是多维数组。


1
投票

使用以下简单方法,

$query = $this->db->get_where('table', array('table_id' => $id));

        $queryArr = $query->result();        

        foreach ($queryArr[0] as $key=>$val)
        {
            $row[$key]=$val;
        }

print_r($row); //this will give associative array

0
投票

这是 CodeIgniter-3 的解决方案

function getAllDiaries(){
    $query = $this->db->query("YOUR QUERY HERE");
    return $query->result('array');
}

function getAllDiaries(){
    return $this->db->query("YOUR QUERY HERE")->result('array');
}

注意: result() 函数接受“数组”或“对象”作为参数。默认为“对象”

© www.soinside.com 2019 - 2024. All rights reserved.