1

这是代码:

$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 示例,这段代码没有任何问题。干杯。

4

2 回答 2

5

文档

如果不使用mysqli_stmt_store_result(),并且在执行prepared statement后立即调用该函数,该函数通常会返回0,因为它无法知道结果集中有多少行,因为结果集没有保存在内存中然而。

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

因此,您需要将其更改为:

$q->bind_param('ss', $username, $password);
$q->execute();
$q->store_result();
printf('Rows returned: %d', $q->num_rows);
于 2010-08-30T17:39:47.317 回答
0

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

$result = mysql_query($query);    

我会建议使用类似的东西:

if (!$result)

但是你所做的看起来不像通常的 php 调用,仍然希望这会有所帮助。

于 2010-08-30T17:45:55.853 回答