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 注释?