【问题标题】:Codeigniter: query not properly printedCodeigniter:查询未正确打印
【发布时间】:2017-10-09 01:19:15
【问题描述】:

我已经实现了一个查询来显示我的表的行数,该查询已在模型中实现,并且已在控制器类中调用了该函数,但它抛出了下一个文本:

CI_DB_mysqli_result 对象 ( [conn_id] => mysqli 对象 ( [affected_rows] => 1 [client_info] => mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $ [client_version] => 50011 [connect_errno] => 0 [connect_error] => [errno] => 0 [error] => [error_list] => 数组 () [field_count] => 1 [host_info] => localhost 通过 TCP/IP [info] => [insert_id] => 0 [server_info] => 5.5.5-10.1.21-MariaDB [server_version] => 50505 [stat] => 正常运行时间:8603 线程:1 问题:1350 慢查询:0 打开:38 刷新表:1 打开表:每秒 32 次查询平均:0.156 [sqlstate] => 00000 [protocol_version] => 10 [thread_id] => 61 [warning_count] => 0) [result_id] => mysqli_result 对象([current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0) [result_array] => 数组 ( ) [result_object] => 数组 ( ) [custom_result_object] => 数组 () [current_row] => 0 [num_rows] => [行数据] => )

数据库

型号

<?php

class Entregas_Model extends CI_Model {

    public function __construct() {
        parent::__construct();
        // Your own constructor code
        $this->load->database();
    }

    //Para obtener el número de filas 
    //y así determinar el número de plazas
    public function get_rows($idCarga) {
        $this->db->select('COUNT(idCarga)');
        $this->db->from('entregas');
        $this->db->join('intervalosHorarios', 'entregas.idCarga = intervalosHorarios.idIntervaloHorario');
        //$this->db->on('entregas.idCarga = intervalosHorarios.idCarga');
        $this->db->where('entregas.idIntervaloHorario', $idCarga);

        $q = $this->db->get();
        //$q = $q->result_array();
        print_r($q);
        return $q;
    }

}

控制器(短版)

  public function entregas_lista($idCarga) {

        $crud = new grocery_CRUD();

        $this->Entregas_Model->get_rows($idCarga);
  }   

我做错了什么?

【问题讨论】:

  • 使用 $this->db->last_query();而不是 print_r($q)
  • 如果要计数,请使用 $this-&gt;db-&gt;get(),而不是 $this-&gt;db-&gt;count_all_results(),如果要记录,请使用 $this-&gt;db-&gt;get()-&gt;result(),如果只需要一行,请使用 $this-&gt;db-&gt;get()-&gt;row()
  • 更改 $this->db->select('COUNT(idCarga)');到 $this->db->select('COUNT(idCarga) as total_records');然后打印这个 $q = $this->db->get()->row()->total_records;
  • @HosseinShahsahebi Jose 已经在“COUNT(idCarga)”中计算结果,不需要 $this->db->count_all_results()
  • @RanjeetSingh 所以为了简单起见,他应该删除select 部分

标签: php mysql codeigniter


【解决方案1】:

为了简单起见,您应该如下更改您的Query Builder:

$this->db->from('entregas');
$this->db->join(/*Join Parameters*/);
$this->db->where('entregas.idIntervaloHorario', $idCarga);
$q = $this->db->count_all_results(); //q should contain integer that represent your records count

在其他情况下,您想要获取一条或所有记录,您应该向get 添加另一个函数,如下所示:

$this->db->get()->row(); //return 1 row
$this->db->get()->result(); //return all matched rows

【讨论】:

  • 回来麻烦...添加新项目后查询总是返回1,这太疯狂了,我已经尝试了所有:(
  • 解决了!为了更好地查询:public function get_rows($idCarga) { $query = $this-&gt;db-&gt;query('SELECT * FROM entregas LEFT JOIN intervaloshorarios on entregas.idCarga = intervaloshorarios.idIntervaloHorario WHERE entregas.idIntervaloHorario = ' . $idCarga . ';'); echo $query-&gt;num_rows(); return $query; }
  • 这不是一个好主意,因为您获取所有行并计算它们会导致您的服务器参与很多
  • 更好地使用(添加左连接)? $this-&gt;db-&gt;from('entregas'); $this-&gt;db-&gt;join(/*Join Parameters with LEFT JOIN added*/); $this-&gt;db-&gt;where('entregas.idIntervaloHorario', $idCarga); $q = $this-&gt;db-&gt;count_all_results();
  • 原因可能是你加入的问题或其他类型的问题,看看并在没有加入的情况下测试它
【解决方案2】:

使用下面一行查看与数据库相关的信息:

$this->output->enable_profiler(TRUE);

它将显示在当前调用堆栈中运行的所有数据库查询。或者您可以在查询运行后使用下面的行,仅打印查询。

$this->db->last_query();

【讨论】:

  • 我一直在寻找类似@Hossein 的答案,但还是谢谢你!
猜你喜欢
  • 2020-01-30
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多