mysqli_query()总是返回true

时间:2012-04-17 15:43:51

标签: php mysql mysqli

这是我的表格:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <form action="register_ajax.php" method="get">
    <input type="text" name="email">
    <input type="submit" value="test">
    </form>
  </body>
</html>

这是我的PHP代码:

<?php
    $dbc = mysqli_connect("localhost","root","*******","continental_tourism") OR die(mysqli_connect_error());
    $email = $_GET['email'];
    $query = "SELECT email FROM customer_info WHERE email = '$email' ";
    $r = mysqli_query($dbc, $query) OR die(mysqli_error($dbc));
    if($r)
        echo "Email address exists!";
    else
        echo "sss";
?>

如果我输入正确的(db上的现有电子邮件)$r为真。但是,如果我输入不存在的电子邮件,那么$r也是如此。这是为什么?基本上我想检测空集。我该怎么办?

谢谢!

4 个答案:

答案 0 :(得分:12)

如果存在SQL错误,

$r将仅为false。否则,即使SELECT语句没有返回任何行,它也将始终返回资源ID。

使用mysqli_num_rows()计算返回的行数。零意味着没有人使用该电子邮件地址。

if(mysqli_num_rows($r))
    echo "Email address exists!";
else
    echo "sss"; 

答案 1 :(得分:4)

如果查询成功

mysqli_query()将始终返回MySQLi结果资源。当作为布尔值进行测试时,资源将始终评估为TRUE

成功的查询不一定是返回结果的查询,它只是一个没有失败的查询。当出现错误时,查询被认为是失败的,例如MySQL服务器中的语法错误或处理错误 - 这种情况下它们将返回FALSE。但是找不到结果的查询仍然是一个成功的查询。

您需要使用mysqli_num_rows()来确定查询是否找到了任何结果:

<?php
    $dbc = mysqli_connect("localhost","root","longhorn","continental_tourism") OR die(mysqli_connect_error());

    $email = $_GET['email'];

    $query = "SELECT email FROM customer_info WHERE email = '$email' ";

    $r = mysqli_query($dbc, $query) OR die(mysqli_error($dbc));

    if(mysqli_num_rows($r) > 0)
        echo "Email address exists!";
    else
        echo "sss"; 
?>

答案 2 :(得分:0)

mysqli_query将在成功时返回结果对象,并在失败时返回false。未选择任何行不被视为失败。您可以使用mysqli_num_rows检查返回的行数。

答案 3 :(得分:0)

需要测试一下 <ListGroupItem active tag="button" action onClick={this.props.toggleCollapse}> <Collapse isOpen={this.props.collapse} /> 是否为真以及行数是否大于0。

以下作品:

$r
相关问题