ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

PHP-MySQL-选择计数返回true

2019-10-27 00:15:00  阅读:252  来源: 互联网

标签:return return-value select mysql php


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

$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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有