在PHP中调用boolean上的成员函数num_rows()

时间:2015-12-27 17:21:31

标签: php

我的代码出现以下错误,

Call to a member function num_rows() on boolean in C:\xampp\htdocs\codeigniter\application\controllers\go.php on line 15

代码:

<?php if (!defined('BASEPATH')) exit('No direct script access
allowed');
class Go extends MY_Controller {
function __construct() {
parent::__construct();
$this->load->helper('string');
}
public function index() {
if (!$this->uri->segment(1)) {
redirect (base_url());
} else {
$url_code = $this->uri->segment(1);
$this->load->model('Urls_model');
$query = $this->Urls_model->fetch_url($url_code);
if ($query->num_rows() == 1) {
foreach ($query->result() as $row) {
$url_address = $row->url_address;
}
redirect (prep_url($url_address));
} else {
$page_data = array('success_fail' => null,
'encoded_url' => false);
$this->load->view('common/header');
$this->load->view('nav/top_nav');
$this->load->view('create/create', $page_data);
$this->load->view('common/footer');
}
}
}
}

4 个答案:

答案 0 :(得分:1)

@ahmed是正确的,db代码属于模型,但你遇到的问题很可能来自db错误。

除了解决问题之外,解决方法就是这样。

if ($query->num_rows() == 1) {

应改为

if ($query && $query->num_rows() == 1) {

我会在其中放一个else来将$ this-db-&gt; error()转储到error_log,这样你就可以看到问题所在。

答案 1 :(得分:0)

你应该在Model中调用'num_rows()'而不是Controller,因为这个函数经常在get()方法之后使用:

//Model function:
$query = $this->db->get();
$data = Array();
if($query->num_rows()){
    //Work with data:
    foreach($query->result_array() AS $row){
        $data[] = $row;
    }
}

return $data;

我想如果你想在控制器中使用num_rows,你应该像这样返回查询AS:

$query = $this->db->get();
return $query;

答案 2 :(得分:0)

    $data = [];
    $this->db->where('', 0);
    $query = $this->db->get('');

    if ($query->num_rows()>0)
    {
        foreach ($query->result_array() as $row)
        {
            $data[] = $row;
        }
    }

    $query->free_result();
    return $data;

首先检查值是否来自数据库。如果值来自表,则放置大于0的值。如果您的值存在,则查询运行关键字。我感谢这对您有帮助

答案 3 :(得分:0)

这是由于CI中的Active Record错误,导致添加了额外的WHERE子句而导致列名和类似内容不明确。 尝试使用$this->db->last_query();来获取实际查询,这将立即清楚为什么 $ query 不是对象。