num_rows方法不返回所选行的数量

时间:2010-08-30 17:36:42

标签: php oop mysqli mysql-num-rows

这是代码:

$q = $this->db->prepare("SELECT id FROM `users` WHERE username=? AND password=? LIMIT 1");
$q->bind_param('ss', $username, $password);
$q->execute();
printf('Rows returned: %i', $q->num_rows); 

我正在使用MySQLi尝试检查用户登录凭据。一切正常,查询被执行并返回数据(我已单独检查过)但我只得到这个输出:Rows returned:

这里有什么不对吗?我是使用MySQLi的新手,但是通过PHP.net示例,这段代码没有任何问题。欢呼声。

2 个答案:

答案 0 :(得分:5)

来自the docs

  

如果您不使用mysqli_stmt_store_result(),并且immediatley在执行预准备语句后调用此函数,则此函数通常会返回0,因为它无法知道结果集中有多少行,因为结果集不是保存在记忆中了。

     

mysqli_stmt_store_result()将结果集保存在内存中,因此您可以在执行语句并保存结果集后立即使用此函数。

所以你需要把它改成:

$q->bind_param('ss', $username, $password);
$q->execute();
$q->store_result();
printf('Rows returned: %d', $q->num_rows);

答案 1 :(得分:0)

不确定它是否朝着正确的方向前进,但是如果您已经将结果限制在第一行,那么基本上只需要检查结果是否为空。如果您要使用:

$result = mysql_query($query);    

我建议选择以下内容:

if (!$result)

但是你所做的并不像普通的php调用,仍然希望这会有所帮助。