如何处理MySQL的结果对象

时间:2014-12-07 20:34:00

标签: php mysql codeigniter

我正在尝试使用PHP和MySQL来处理一些关系数据库处理。为了结合两个不同表的输出,我在stackoverflow找到了一些帮助。建议是将输出组合在一个结果对象中(据我所知),所以代码如下所示:

// Function to read all projects from database
public function get_projects() {
    $query = "SELECT pt.*, at.* FROM ed_projects as pt, ed_project_address as at WHERE pt.project_id = at.project_id";
    $db_result = $this->db->query($query);
    $result_object = $db_result->result();
    return $result_object;
}

其中ed_project是主表的名称,ed_project_address是子表(或其所谓的子表),其中包含每个项目的街道名称,邮政编码,城市等。地址属性通过project_id链接到项目。

我可以通过数据库读取""部分,但是当我尝试使用它时,我收到一个错误:"致命错误:不能在(...)" 中使用stdClass类型的对象作为数组。当我使用CodeIgniter时,它会通过另外两个步骤:

项目视图控制器:

/* index() - Project view controller
 * Handles the showing of the project main page, that is the list of all
 * projects found in the database. See also views/projects/index.php.
 */
public function index() {
    $data['projects'] = $this->project_model->get_projects();
    $data['title'] = 'Ejendomme';
    $this->load->view('templates/header', $data);
    $this->load->view('projects/index', $data);
    $this->load->view('templates/footer');
}

项目视图:

<?php foreach ($projects as $projects_item): ?>

    <h2><?php echo $projects_item['pt.projects']->project_name ?></h2>
    <div class="main"><?php echo $projects_item['at.address_street'] ?></div>

<?php endforeach ?>

错误发生在第3行的Project View(index.php)中。我已经在PHP中阅读了很多关于对象的内容,但是添加CodeIgniter框架似乎模糊了一些东西让我无法得到它: - (我离开这里了吗?还是我错过了最后一点?

1 个答案:

答案 0 :(得分:1)

你犯了错误 在你的模型中你返回对象

return $result_object;

但是你在视图中使用它作为数组。 你应该像这样使用它

  $projects_item->project_name

如果要在视图中将其用作数组,则应从模型返回数据

$result_object = $db_result->result_array();

如果您的两个表具有相同的列名,那么您的查询也会产生错误。在这种情况下,您必须指定要从哪个表格中选择哪个表格。