PHP / mySQL - concat查询错过了几个字段

时间:2017-06-14 06:01:45

标签: php mysql

我在我网站上的各种网页上搜索表单,我用它来显示用户在搜索文本字段中输入的数据库中的特定记录。

我在所有这些页面中使用了相同的代码,对CONCAT SQL查询进行了一些修改。除了一个页面之外,它在所有这些页面上都运行良好。

以下是该页面的查询 -

if(isset($_POST['keywrd']))
{
    $kw1 = $_POST['keywrd'];
    $query = "SELECT * FROM `library_books` WHERE CONCAT(`Book_id`, `Book_Title`, `Author`, `Class`, `Subject`) LIKE '%$kw1%' limit $page1,18";
    $Result = mysqli_query($conn, $query);
    $cou = mysqli_num_rows($Result);

        if(!$row = mysqli_fetch_array($Result))
        {
            echo "</br></br>";
            die("No match found! Please Try Again");
        }


 while($query_exec=mysqli_fetch_array($Result, MYSQLI_ASSOC))
 {
  echo '<table id="myTable">
  <tr>
  <td height="auto"  width="70" align="center">'.$query_exec['Book_id'].'</td>
  <td height="auto"  width="300" align="center">
    <a name="status" href="status.php?id='.$query_exec['Book_id'].'"> '.$query_exec['Book_Title'].'</a>
</td>
  <td height="auto"  width="230" align="center">'.$query_exec['Author'].'</td>
  <td height="auto"  width="70" align="center">'.$query_exec['Class'].'</td>
  <td height="auto"  width="165" align="center">'.$query_exec['Subject'].'</td>
  <td height="auto"  width="120" align="center">'.$bool.'</td>
  <td height="auto"  width="180 align="center">'.$isava.'</td>
</tr></table>';
}
}

在此页面上,查询会根据提供的输入返回结果,但它会遗漏几个与输入关键字匹配的字段。

可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

这是因为您正在获取第一行以检查是否存在结果而while循环从下一行开始,因为mysqli_fetch_arraymysqli_fetch_row的扩展版本,它使用了用于跟踪结果集的指针。

您应该检查$cou,看看您的结果是否成功并同时删除if语句,或至少使用mysqli_data_seek重置$Result

检查$cou

$query = "SELECT * FROM `library_books` WHERE CONCAT(`Book_id`, `Book_Title`, `Author`, `Class`, `Subject`) LIKE '%$kw1%' limit $page1,18";
$Result = mysqli_query($conn, $query);
$cou = mysqli_num_rows($Result);

if ($cou < 1) {
    echo "</br></br>";
    die("No match found! Please Try Again");
}

while ($query_exec=mysqli_fetch_array($Result, MYSQLI_ASSOC)) {

重置指针:

$query = "SELECT * FROM `library_books` WHERE CONCAT(`Book_id`, `Book_Title`, `Author`, `Class`, `Subject`) LIKE '%$kw1%' limit $page1,18";
$Result = mysqli_query($conn, $query);
$cou = mysqli_num_rows($Result);

if (!$row = mysqli_fetch_array($Result)) {
    echo "</br></br>";
    die("No match found! Please Try Again");
}

mysqli_data_seek($Result, 0);

while ($query_exec=mysqli_fetch_array($Result, MYSQLI_ASSOC)) {