【发布时间】:2016-10-21 01:34:35
【问题描述】:
我正在尝试确定电子邮件是否在我的数据库中。为此,我编写了这段代码:
$query_checkmail = "SELECT COUNT(*) FROM user WHERE email = ?;";
if($stmt = mysqli_prepare($connection, $query_checkmail))
{
mysqli_stmt_bind_param($stmt, "s", $_POST["email"]);
$result = mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
echo "<pre>";
var_dump($result, mysqli_fetch_all($result));
echo "</pre>";
由于我希望查询返回 0,因为电子邮件不应该在数据库中,所以输出是这样的(来自 var_dump):
bool(true)
NULL
我不明白为什么我没有得到值为 0 的 mysqli 结果对象,而是布尔值 true,如果我想检查它,它总是会在日志中触发 PHP 警告。
我之前有一个正常的SELECT id FROM user WHERE email = ?;"; 并得到了相同的结果。我认为使用 COUNT 可以防止这种情况发生,但我的尝试显然失败了。
我也发现了这个Stackoverflow Link,但不幸的是它并没有帮助我解决我的问题,即了解该值是否已经存在。
非常感谢任何帮助。如果这些信息还不够,我会立即提供缺失的部分。
【问题讨论】:
-
只是出于好奇,确定邮件是否存在后,你会怎么做?
-
这是添加新用户的过程。我不能有具有此特定电子邮件地址的用户,因为它必须是唯一的,因为它是登录凭据的一部分,因此我必须检查是否已经存在具有此电子邮件地址的用户。如果是,我返回一个错误,如果不是,我可以继续。结果我得到了
TRUE,即使没有人知道这个邮件地址而不是我需要的0 -
只需建立一个唯一的密钥并提交电子邮件。插入的结果会告诉你电子邮件是否存在
-
你得到
true因为mysqli_stmt_execute()返回一个布尔值。这仅意味着查询已成功执行,它与该查询中获取的结果无关(请参阅documentation,特别是在“返回值”下)。NULL值来自您将布尔值放入mysqli_fetch_all(),它需要一个 mysqli_result,而不是布尔值。 -
我明白了 Qirel 的观点,顺便说一句,好名字。我非常喜欢这个,如果它有效,请将其作为答案发布,以获得支持和接受 :) 验证它。我很乐意接受这个作为你的答案:)
标签: php mysql select return return-value