数据库
首页 > 数据库> > PHP-MySQL-选择计数返回true

PHP-MySQL-选择计数返回true

作者:互联网

我正在尝试确定电子邮件在我的数据库中是否不完整.为此,我编写这段代码:

$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警告.

之前我有一个来自用户WHERE email =?;“;的普通SELECT ID,并且得到了相同的结果.我认为使用COUNT可以防止这种情况,但是我的尝试显然失败了.

我也找到了这个Stackoverflow Link,但是不幸的是,它并没有帮助我解决知道该值是否已经存在的问题.

非常感谢您的帮助.如果此信息不足,我将立即提供缺失的部分.

解决方法:

计数本身不会返回布尔值true或false,而是要检查从mysqli_stmt_execute()分配的变量,该变量返回布尔值.这与查询结果无关.如果您阅读有关此函数的文档,特别是mysqli_stmt_execute()的返回值,则会看到它们为true或false,因此毫不奇怪的是var_dump()返回布尔值.

如果需要实际计数,则必须使用mysqli_stmt_bind_result()和mysqli_stmt_fetch()来获得计数结果.这将产生正确的结果.如果您不确定如何使用这些功能,此手册将显示该示例.

> http://php.net/manual/en/mysqli-stmt.execute.php
> http://php.net/manual/en/mysqli-stmt.bind-result.php

至于NULL,这是因为要将布尔值传递给mysqli_fetch_all()函数,该函数期望mysqli_result,而由于上述原因而给它一个布尔值.

标签:return,return-value,select,mysql,php
来源: https://codeday.me/bug/20191026/1940427.html