Php num_rows()的奇怪行为 编辑

Php num_rows()的奇怪行为 编辑,php,codeigniter,Php,Codeigniter,看在上帝的份上,这不是复制品。不要这样关闭它。我不是在问这个错误意味着什么。我更感兴趣的是知道为什么在这种情况下这会给我一个错误,而在其他地方使用它时效果很好 对于查询,例如: $this->db->select('user_id'); $this->db->from("members"); $this->db->where(array("username"=>$post->un, "passwor

看在上帝的份上,这不是复制品。不要这样关闭它。我不是在问这个错误意味着什么。我更感兴趣的是知道为什么在这种情况下这会给我一个错误,而在其他地方使用它时效果很好

对于查询,例如:

$this->db->select('user_id');
$this->db->from("members");
$this->db->where(array("username"=>$post->un, "password"=>sha1($post->pw)));
$query = $this->db->get();  
if($query->num_rows() == 1)
{
   // some logic goes here
}
我得到以下错误

对布尔值上的成员函数num_rows()的调用

如果我使用
$this->db->last\u query()
,我将得到以下结果:

SELECT `user_id`
FROM `members`
WHERE `username` = 'adg'
AND `password` = '3a1c21a559ed42d6ce17c0b8205b6bda2465c2a8'
查询是100%正确的,在MySql控制台中运行时,返回一个空集(0行),这很好。但为什么它在代码中使用时返回布尔值呢

顺便说一句,我在其他地方对
$query
对象使用了
num_rows()
,看起来效果不错

CI版本为3.1.3 更新
  • var\u dump($query)
    正在打印
    bool(false)

它没有很好的文档记录,但是当查询失败时,可能会返回一个布尔值,而不是
CI\u DB\u结果
对象。这就是发生在你身上的事情。关于在您的示例中发生这种情况的原因,我的第一个猜测是某些数据被不正确地转义——很可能是在where语句中。试试这个

$this->db->where(数组(“用户名”=>$post->un,“密码”=>sha1($post->pw)),NULL,FALSE)

看看这是否有帮助

有时,当问题复杂时,我不得不对我的结果进行如下检查

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

只是为了确保我没有试图“调用布尔值上的成员函数num_rows()”

尝试使用var_dump($query)查看对象此函数在页面上打印变量的内容可能与它的含义有关,因为这意味着查询失败。如果你假装你已经知道了这一点,那么我希望你已经阅读了如何调试为什么你的查询在这一点上失败。你必须得到潜在的sql错误-直到那时我们只能猜测。顺便说一句,您的问题与@CBroe链接的问题是重复的,因为它不包含MySQL错误消息,并且调试步骤在链接的主题中有描述。@ParagSoni它不是这样工作的,空的查询结果不是错误。