【问题标题】:mysqli_query() always return true [duplicate]mysqli_query() 总是返回 true [重复]
【发布时间】:2012-04-17 15:43:51
【问题描述】:

这是我的表格:

<!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";
?>

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

谢谢!

【问题讨论】:

  • 首先,在$_GET['email']上使用mysqli_real_escape_string()
  • 你做错了,你检查数据库是否正在查询,这在你的情况下总是正确的......你需要做的是检查从查询返回的行数

标签: php mysql mysqli


【解决方案1】:

$r 只有在出现 SQL 错误时才会为假。否则它将始终返回一个对象,即使您的 SELECT 语句没有返回任何行。

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

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

【讨论】:

    【解决方案2】:
    如果查询成功,

    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"; 
    ?>
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        需要测试$r是否为真,行数是否大于0。

        以下作品:

        if ($r and mysqli_num_rows($r) > 0) {
        
          echo "rows exist"; } else {
        
        echo "rows don't exist";  }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-01
          • 2013-08-06
          • 2017-05-10
          • 2013-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多