我的代码出现以下错误,
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');
}
}
}
}
答案 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 不是对象。