【发布时间】:2014-12-11 05:06:50
【问题描述】:
我目前正在使用 PDO 从 MySQL 数据库中检索数据。我正在使用 foreach 将数据显示到页面上,并希望用户能够在输入字段中输入搜索词,点击提交按钮,然后只返回标题包含搜索词的结果。
这是我当前的代码:
file_functions.php - SQL 查询函数所在的位置
function getbycategory($category, $limit){
global $db;
if (isset($category) AND $category != "all") {
$sm = $db->prepare ("SELECT * FROM parts WHERE main_category = :category");
$sm->bindParam(':category', $category, PDO::PARAM_INT);
} else {
$sm = $db->prepare ("SELECT * FROM parts");
}
$sm->execute();
return $sm->fetchAll();
}
files.php - 显示结果的位置
$files = getbycategory($_GET['filter']);
foreach($files as $file){
echo'<div class="col-lg-" id="file-'.$file['id'].'">
<div class="file-list-item first" id="">
<img class="file-image" height="120px" width="180px" src="'.$file['image_url'].'" />
<div class="file-text">
<h3><strong>'.$file['name'].'</strong></h3>
Submitted by: '.$file['submitter'].'<br/>
Author: '.$file['author'].'<br />
Category: '.ucfirst($file['subcategory']).'<br />
Description: '.substr($file['description'],0,45).'...
</div>
<div class="download">
<a target="_blank" href="'.$file['download_url'].'" class="btn-success btn btn-default">Download</a>
<a href="'.baseurl.'/broken.php?id='.$file['id'].'" class="btn btn-default">Report as Broken</a><br /><br />';
if($file['is_broken']){
echo '<span class="broken"><i data-toggle="tooltip" data-placement="left" id="broken" title="This file has been reported as broken and is awaiting review." class="fa fa-warning fa-2x"></i></span>';
}
echo '
</div>
</div>
</div>';
};
?>
以下是用于优化结果的表格。目前,过滤器下拉菜单适用于过滤器,但搜索词不适用。这就是我想要实现的
<form method="get">
<select name="filter">
<option <?php if($_GET['filter'] == "all" OR !isset($_GET['filter'])){echo 'selected';} ?> value="all">View All Files</option>
<option <?php if($_GET['filter'] == "1") {echo 'selected';} ?> value="1">View Vehicles Only</option>
<option <?php if($_GET['filter'] == "2") {echo 'selected';} ?> value="2">View Lighting Equiptment</option>
</select>
<input type="submit" value="Filter Results"/><br /><br />
<input type="text" name="search" placeholder="Enter a search term" />
<input type="submit" value="Search Results"/>
</form>
总而言之,我希望使用代码底部 sn-p 中的文本字段,通过将它们的标题与搜索词进行比较来优化 files.php 中显示的结果。
我希望将搜索词与 $file['name'] 进行比较。
非常感谢。
【问题讨论】:
-
对于简单的string contains 样式匹配,使用
LIKE比较,例如AND LOWER(name) LIKE CONCAT('%', LOWER(:search), '%')。您的排序规则可能不需要LOWER()调用(即,它可能不区分大小写)。更复杂的匹配见dev.mysql.com/doc/refman/5.0/en/fulltext-search.html -
@Phil,是否可以在语句中包含可选部分,例如:如果未定义参数,则它将只返回所有结果,但如果定义了搜索,则“LIKE”将被添加到语句中?
-
简单,只需有条件地构建查询。
if (!empty($search)) $query .= ' AND name LIKE...';