Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-select count返回true_Php_Mysql_Select_Return_Return Value - Fatal编程技术网

Php MySQL-select count返回true

Php MySQL-select count返回true,php,mysql,select,return,return-value,Php,Mysql,Select,Return,Return Value,我正在尝试确定我的数据库中是否存在电子邮件。为此,我编写了以下代码: $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

我正在尝试确定我的数据库中是否存在电子邮件。为此,我编写了以下代码:

$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的mysqli结果对象,而是布尔值true,如果我想检查它,它总是在日志中触发一个PHP警告

我有一个普通的
selectid来自用户whereemail=?;“;
之前,我也得到了同样的结果。我想用COUNT可以阻止这种情况,但我的尝试显然失败了

我也发现了这一点,但不幸的是,这并没有帮助我解决我的问题,即了解该值是否已经存在


非常感谢您的帮助。如果这些信息不够,我将立即提供缺少的信息。

我建议您使用PDO而不是mysqli。首先建立连接,然后:

$user = DB::query("SELECT UserId FROM user WHERE email = %s",$email);
$count = DB::count();

您可以使用MeekroDB,它是完美的php mysql库。例如,使用此代码行可以获得类似的结果:

$result = mysqli_stmt_get_result($stmt);
while ($row = mysqli_fetch_array($result, MYSQLI_NUM))
{
foreach ($row as $r)
{
print "$r ";
}
print "\n";
}

正如您所看到的,代码更简洁、易于编写。Meekro是免费的、开源的:

计数本身不会返回布尔值true或false,您正在检查从
mysqli_stmt_execute()分配的变量
,它返回一个布尔值。这与查询结果无关。如果您阅读有关此函数的文档,特别是
mysqli_stmt_execute()
的返回值,您将看到它们要么是
true
要么
false
,因此
var\u dump()毫不奇怪
的值将返回一个布尔值

如果您想要实际计数,您必须使用
mysqli\u stmt\u bind\u result()
mysqli\u stmt\u fetch()
来获得计数结果。这将产生正确的结果。如果您不确定如何使用这些函数,本手册将给出相关示例


至于
NULL
,这是因为您正在将一个布尔值传递到函数中,该函数需要一个mysqli\u结果,而您正根据上述原因为它提供一个布尔值。

mysqli\u stmt\u execute返回true或false,您应该在执行后使用mysqli\u stmt\u get\u结果来检索数据

我从PHP.NET复制了示例代码


出于好奇,在确定电子邮件是否存在后,您会怎么做?这是添加新用户的过程。我不能有一个具有此特定电子邮件地址的用户,因为它必须是唯一的,因为它是登录凭据的一部分,因此我必须检查是否已经有一个具有此电子邮件地址的用户。如果是s我返回一个错误,如果没有,我可以继续。我得到
TRUE
结果,即使没有人拥有此邮件地址,并且不
0
,我只需要建立一个唯一的密钥并提交电子邮件。插入的结果将告诉您该电子邮件是否存在,您得到的是
TRUE
,因为
mysqli\u stmt\u execute()
返回一个布尔值。这只意味着查询已成功执行,与在该查询中获取的结果无关(请参阅,特别是在“返回值”下)“
NULL
值来自于您将一个布尔值放入,它期望一个mysqli_结果,而不是一个布尔值。我看到了点Qirel,顺便说一句,很好的名称。我非常喜欢这个,如果它有效,将它作为一个答案发布以获得投票,并获得认可:)验证它。我很乐意接受这个作为您的答案:)这可能有效,但我不喜欢PDO,也从不使用它为了在我的许多代码行中保持一致,我不能将其用于此特定问题。虽然您的代码对我没有帮助,但文本确实有帮助。请参阅我对Quills答案的编辑,以了解修复我问题的代码。但感谢您的回答:)我建议您更新代码以匹配此问题
$user = DB::query("SELECT UserId FROM user WHERE email = %s",$email);
$count = DB::count();
$result = mysqli_stmt_get_result($stmt);
while ($row = mysqli_fetch_array($result, MYSQLI_NUM))
{
foreach ($row as $r)
{
print "$r ";
}
print "\n";
}