即使db表中没有给定的电子邮件地址,这段代码也会每次返回1。当你在bind_result之后立刻放置die($ count)。每次返回1。您是否注意到我的代码中有任何错误?
$stmt = $db->prepare("SELECT COUNT(id) FROM `users` WHERE `email`=? LIMIT 1") or die($db->error);
$stmt->bind_param("s", $email) or die ($stmt->error);
$stmt->execute() or die ($stmt->error);
$count=$stmt->bind_result($count) or die ($stmt->error);
die($count);
$stmt->close();
return ($count > 0 ? true : false);
答案 0 :(得分:2)
您没有调用$stmt->fetch()
将查询结果放入绑定变量$ count。
因此,$ count的值设置为$stmt->bind_result()
的返回值,该值始终为true(1)或false(0)。
请参阅http://php.net/manual/en/mysqli-stmt.bind-result.php上的示例,使用bind_result()
告诉语句要存储的PHP变量结果,但是您必须将查询结果作为对fetch()
的单独调用获取
重新评论:这些函数都不会返回您的计数结果。
函数在成功时返回TRUE,在失败时返回FALSE。它们不返回查询结果。这就是绑定变量的原因,因此fetch可以将结果存储在该变量中作为副作用 - 而不是作为返回值。您不应该指定$count=*anything*
。
以下是您的代码的外观:
$stmt = $db->prepare("SELECT COUNT(id) FROM `users` WHERE `email`=? LIMIT 1")
or die($db->error);
$stmt->bind_param("s", $email)
or die ($stmt->error);
$stmt->execute()
or die ($stmt->error);
$stmt->bind_result($count) // do not use return value
or die ($stmt->error);
$stmt->fetch() // do not use return value
or die ($stmt->error);
print ($count);
$stmt->close()
or die ($stmt->error);
return ($count > 0 ? true : false);
答案 1 :(得分:1)
bind_result
将变量绑定到结果存储的预准备语句,成功时返回TRUE,失败时返回FALSE。
$stmt->bind_result($count);
$stmt->fetch();
$stmt->close();
return ($count > 0 ? true : false); // return $count > 0; would be ok.