CodeIgniter 中 Active Record 的“count_all_results”和“where”问题

Posted

技术标签:

【中文标题】CodeIgniter 中 Active Record 的“count_all_results”和“where”问题【英文标题】:problem with "count_all_results" and "where" with Active Record in CodeIgniter 【发布时间】:2011-11-25 02:13:32 【问题描述】:

在 CodeIngiter 用户指南中,他们说以下代码:

$this->db->where('name', $name);
$this->db->where('title', $title);
$this->db->where('status', $status); 
// WHERE name = 'Joe' AND title = 'boss' AND status = 'active'

这意味着当我想通过活动记录从数据库中选择一些东西时,我应该使用where 方法,它会通过在字段之间替换AND 来做到这一点。 现在我想制作登录页面,我这样做:

public function True_login($username = '',$password = '')
    
        $this->db->flush_cache();
        $this->db->where('username',$username);
        $this->db->where('password',$password);
        $count = $this->db->count_all_results('PM_ADMIN_LIST');
        if ($count === 1)
        
            return TRUE;
        
        else
        
            return FALSE;
        
    
但如果 username=$username OR password = $password 它将返回 TRUE。 如果在表中找到用户名或密码之一($count === 1 它将返回 TRUE) 我的问题在哪里,我应该如何解决?

【问题讨论】:

根据文档,两次调用“where”将产生一个 AND 查询。我不明白问题是什么? 你的意思是它被评估为OR 而不是AND 你试过关联数组方法吗?您使用的是哪个 codeigniter 版本? 【参考方案1】:
$this->db->count_all_results('PM_ADMIN_LIST');

正在返回表中的行数并忽略上面的限制器。

试试:-

$this->db->where('username',$username);
$this->db->where('password',$password);
$this->db->from('PM_ADMIN_LIST');
$count = $this->db->count_all_results();

另外,进行一些调试 - 如果您知道 $count 的值是什么,那么它可能会帮助您确定 Active Record 查询是错误的,而不是认为它正在执行 OR 而不是 @ 987654325@.

【讨论】:

我做到了,但我将返回与我的代码相同的结果。我试过 $count = $this->db->where('username',$username)->where('password',$password)->get('PM_ADMIN_LIST')->num_rows();也是。但是它也有这个问题。 我发布的代码应该可以工作,请发布您尝试过的代码版本。【参考方案2】:

简单使用-> $this->db->count_all(); 代替 $this->db->count_all_results(); 问题解决了......

【讨论】:

【参考方案3】:

count_all_results() 函数中添加值为 false 的第二个参数。

$this->db->count_all_results('PM_ADMIN_LIST',FALSE);

【讨论】:

以上是关于CodeIgniter 中 Active Record 的“count_all_results”和“where”问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 CodeIgniter 中的 Active Record 类从 4 个表中选择数据

使用 CodeIgniter Active Record 语句

CodeIgniter Active Record 与常规查询

CodeIgniter Active Record 中的 SQL 注释?

从 Codeigniter Active Record 中的子查询中选择

CodeIgniter:如果 Active Record 找不到任何数据,则返回 FALSE