我在我网站上的各种网页上搜索表单,我用它来显示用户在搜索文本字段中输入的数据库中的特定记录。
我在所有这些页面中使用了相同的代码,对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>';
}
}
在此页面上,查询会根据提供的输入返回结果,但它会遗漏几个与输入关键字匹配的字段。
可能出现什么问题?
答案 0 :(得分:1)
这是因为您正在获取第一行以检查是否存在结果而while循环从下一行开始,因为mysqli_fetch_array
是mysqli_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)) {