num_rows()的奇怪行为

时间:2017-06-05 09:37:40

标签: php codeigniter

修改

天哪,这不是重复。不要这样关闭它。我不是在询问错误的含义。我更感兴趣的是,在这种情况下,为什么这会给我一个错误,而在其他地方使用它时效果很好。

对于诸如以下的查询:

$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_query(),我会得到以下结果:

SELECT `user_id`
FROM `members`
WHERE `username` = 'adg'
AND `password` = '3a1c21a559ed42d6ce17c0b8205b6bda2465c2a8'

查询是100%正确的,当在MySql控制台中运行时,返回一个空集(0行),这很好。但是为什么在代码中使用它时会返回布尔值。

顺便说一下,我在num_rows()对象上使用$query在其他各个地方,似乎工作正常。

CI版本为3.1.3

更新

  • var_dump($query)正在打印bool(false)

1 个答案:

答案 0 :(得分:0)

没有很好地记录,但是当查询失败时,可能会返回布尔值而不是CI_DB_result对象。这就是发生在你身上的事。我的第一个猜测是,为什么它在你的例子中发生了一些数据被不正确地转义 - 很可能是在where语句中。试试这个。

$ this-> db-> where(array(“username”=> $ post-> un,“password”=> sha1($ post-> pw)),NULL,FALSE) ;

看看是否有帮助。

有时候,当查询很复杂时,我不得不对我的结果进行以下检查。

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

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