【问题标题】:PHP/MYSQL Multiple Search Form not showing records with large database contentPHP/MYSQL 多重搜索表单不显示包含大量数据库内容的记录
【发布时间】:2015-03-12 17:44:37
【问题描述】:

当我在仅包含大约 10 条记录的数据库中查询时,我的搜索表单有效,但是当我查询更多时,它不显示任何记录并转到我的 else“0 记录”请帮助,下面是我的 php 代码。

    <?php

    $sfname = $_POST["fname"];
    $sgen = $_POST["gen"];
    $sdoc = $_POST["doc"];
    $smisc = $_POST["misc"];
    $ssick = $_POST["sick"];
    $sothers = $_POST["others"];
    $servername = "localhost";
    $username = "xxx";
    $password = "xxx";
    $dbname = "xxx";

    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $dbname);

    // Check connection
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }

    if(!empty($sfname) || !empty($sgen) || !empty($sdoc) || !empty($smisc) || !empty($ssick) || !empty($sothers) ){

            $genQueryPart = !empty($sgen) ? "Gender LIKE '%$sgen%'" : "";
            $fnameQueryPart = !empty($sfname) ? "FullName LIKE '%$sfname%'" : "";
            $docQueryPart = !empty($sdoc) ? "Doctor LIKE '%$sdoc%'" : "";
            $miscQueryPart = !empty($smisc) ? "Misc LIKE '%$smisc%'" : "";
           $sickQueryPart = !empty($ssick) ? "Sickness LIKE '%$ssick%'" : "";
            $othersQueryPart = !empty($sothers) ? "Others LIKE '%$sothers%'" : "";

            $arr = array($genQueryPart, $fnameQueryPart,$docQueryPart,$miscQueryPart,$sickQueryPart,$othersQueryPart);

            $sql = "select * from index where";

            $needsAnd = false;
        for ($i = 0; $i < count($arr); $i++) {
            if ($arr[$i] != "") {
                if ($needsAnd) {
                    $sql .= " AND ";
                }

                $needsAnd = true;
                $sql .= " " . $arr[$i];
            }

        }

    //Get query on the database
        $result = mysqli_query($conn, $sql);
    //Check results
        if (mysqli_num_rows($result) > 0)
        {
        //Headers
          echo "<table border='1' style='width:100%'>";
            echo "<tr>";
             echo "<th>File ID</th>";
            echo "<th>Full Name</th>";
            echo "<th>Gender</th>";
            echo "<th>Doctor</th>";
            echo "<th>Misc</th>";
            echo "<th>Sickness</th>";
            echo "<th>Others</th>";
            echo "</tr>";

      //output data of each row
          while($row = mysqli_fetch_assoc($result))
            {
                    echo "<tr>";
                      echo "<td>".$row['FileID']."</td>";
                      echo "<td>".$row['FullName']."</td>";
                      echo "<td>".$row['Gender']."</td>";
                      echo "<td>".$row['Doctor']."</td>";
                      echo "<td>".$row['Misc']."</td>";
                    echo "<td>".$row['Sickness']."</td>";
    echo "<td>".$row['Others']."</td>";
                    echo "</tr>";

            }
                  echo "</table>";
        }
     else {
            echo "0 results";
        }

    } else {
        echo "You must enter at least one value";
    }
mysqli_close($conn);

?>

【问题讨论】:

  • 首先,你确定返回的记录很多吗?你检查过这个吗? var_dump(mysqli_num_rows($result)) 在以下行之后执行此操作: $result = mysqli_query($conn, $sql);
  • 您好,感谢您的回复,它显示“NULL 0 results”
  • 添加一些error checking 和/或检查错误日志。

标签: php mysql forms search


【解决方案1】:

您是否尝试过缓冲结果?

$result = mysqli_query($conn, $sql);
mysqli_store_result($conn);
if(mysqli_num_rows($result) > 0) {
 ...
}

来自PHP Manual

mysqli_num_rows() 的行为取决于使用的是缓冲结果集还是非缓冲结果集。对于无缓冲的结果集,mysqli_num_rows() 在检索到结果中的所有行之前不会返回正确的行数。

【讨论】:

  • 不幸的是,添加 mysqli_store_result 仍然显示“0 个结果”
【解决方案2】:

您的empty() 函数可能有问题(取决于您的数据),请改用isset()

empty() : 如果变量为空字符串,则返回 true、false、array()、NULL、“0?、0 和未设置的变量。

isset():只有当变量不为空时才会返回true。

编辑

用户从下面我的 cmets 得到答案

尝试这样调试:在 mysqli_query 之前打印 $sql,在 phpmyadmin 中复制 sql 并检查查询结果并自行查询。

【讨论】:

  • 尝试像这样调试:在mysqli_query之前打印$sql,在phpmyadmin中复制sql并检查查询结果并自行查询。
  • 嗨,谢谢,我已经尝试了很多不同的代码,是的,问题只是“索引”表名,我尝试在 phpmyadmin 上运行查询,令我惊讶的是它确实如此不起作用,但是当我尝试使用具有相同大量记录的不同表名时,它会显示一些东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2016-05-11
  • 1970-01-01
相关资源
最近更新 更多