我的代码出现以下错误
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');
}
}
}
}
@ahmed认为数据库代码属于模型是正确的,但您遇到的问题很可能是数据库错误。
除了解决问题,解决方法是这样的。
if ($query->num_rows() == 1) {
应该改为
if ($query && $query->num_rows() == 1) {
我会在那里放一个其他的来将$this db->error()转储到error_log,这样你就可以看到问题所在
您应该在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,你应该返回查询结果如下:
$query = $this->db->get();
return $query;
$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的值。如果您的值存在,则查询run forward。我感谢这对你的帮助
这是由CI中的Active Records错误引起的,该错误添加了一个额外的WHERE子句,导致列名不明确等。尝试使用$this->db->last_query();
获取实际查询,就会立即清楚为什么$query不是对象。