【问题标题】:Why does mysqli_num_rows always return 0?为什么mysqli_num_rows 总是返回0?
【发布时间】:2017-08-15 20:23:37
【问题描述】:

如果数据库中存在单词,我想在用户点击提交按钮后检查用户的输入。

因此,我有这个代码。但是,它总是说数据不存在,它发现条件为假。

我下面的代码有什么问题?

$input_word = trim($_POST["word"]);
$data_check = "SELECT * FROM word_collections WHERE single_word = '$input_word'";
$a = mysqli_query($data_check);
if (mysqli_num_rows($a) == 1)
{
    echo "Data exist.";
}
else
{
    echo "Data DOES NOT exist";
}

【问题讨论】:

  • 您确定它返回的值不超过 1?更重要的是,您对SQL Injections 持开放态度,并且应该真正使用Prepared Statements 而不是连接您的查询。特别是因为您根本没有逃避用户输入!
  • 我读过一篇文章 mysqli_num_rows 只会返回 1 或 0 @MagnusEriksson
  • No.. 它返回查询中返回的行数。 "num_rows" = "行数"。如果您对 php 函数有任何疑问,请始终从源头开始:the php manual
  • 不完全正确。可能有不止一个记录。试试>0,如果失败了,那么你的查询可能失败了,你需要检查错误。
  • @Fred-ii- 我尝试使用 > 0 但它仍然说数据不存在,我的数据库中已经有了它

标签: php mysql database


【解决方案1】:

您的查询失败,因为您没有将 db 连接传递到:

$a = mysqli_query($data_check);

连接的变量是未知的,所以你需要自己根据:

$a = mysqli_query($connection, $data_check);

您可能必须使用>0 而不是==1 作为您的num_rows(),因为可能有多个记录。

您的代码也对 sql 注入开放;使用准备好的语句。

在查询中使用 PHP 的 error reportingmysqli_error($connection)

还要确保您的连接实际上是 mysqli_ 而不是另一个 api。

【讨论】:

    【解决方案2】:
    $input_word = trim($_POST["word"]);
        $data_check = "SELECT * FROM word_collections WHERE single_word = '$input_word'";
                            $con = mysqli_connect("host",'id','pass','dbname'); // add this connection
                            $a = mysqli_query($con,$data_check);
                            if (mysqli_num_rows($a) == 1)
                            {
                                echo "Data exist.";
                            }
                            else
                            {
                                echo "Data DOES NOT exist";
                            }
    

    你需要把你的连接放在mysqli_query参数1中。你可以参考w3schools的教程。

    【讨论】:

      【解决方案3】:

      做到这一点的最佳方式。

      $dbhost = 'localhost';
      $dbuser = 'username';
      $dbuser = 'password';
      $dbpass = 'dbname';
      $dbConn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
      
      $query = "SELECT * FROM word_collections WHERE single_word = '$input_word'";
      
      $result = $dbConn->query($query);
      if($result->num_rows == 1){
          echo "have some records";
      }else{
          echo "No records";
      }
      

      【讨论】:

        猜你喜欢
        • 2014-09-02
        • 2021-01-24
        • 2016-09-16
        • 2020-05-25
        • 2013-02-26
        • 2013-06-25
        • 1970-01-01
        • 2013-02-14
        相关资源
        最近更新 更多