这是代码:
$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示例,这段代码没有任何问题。欢呼声。
答案 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调用,仍然希望这会有所帮助。