【发布时间】:2018-10-14 11:37:50
【问题描述】:
我有这个代码可以像谷歌一样进行即时搜索。该代码应该查询数据库以获取匹配的术语,在我的例子中是用户的名字和姓氏。我在查询中使用了LIKE 语法,但它只会在数据库中查找 fname 列。查询是否正确或我需要修复它?注意:我使用 SQLite 作为我的数据库引擎。
PHP 代码:
<?php
if(isset($_POST['action']) && $_POST['action'] == 'lookup'){
$q = filter_var($_POST['q'], FILTER_SANITIZE_STRING);
$stmt = $db->prepare('SELECT id, fname, lname FROM teachers WHERE fname LIKE ? OR lname LIKE ?');
$stmt->execute(array($q));
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
if( $results > 0){
echo json_encode($results);
}
}
?>
HTML 和 JS 代码
<div class="container-fluid" id="content">
<div class="row justify-content-center" id="searchBox">
<div class="col-sm-12 col-md-7 col-lg-7" id="">
<form action="POST" method="" id="searchForm">
<div class="input-group">
<input type="text" name="search" class="form-control" id="searchBar" placeholder="Cerca">
<div class="input-prepend">
<button type="button" name="lookup" class="btn btn-link" id="searchBtn"><i class="fas fa-search"></i></button>
</div>
</div>
</form>
<div class="suggestedResults"></div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
quickSearch();
});
var quickSearch = function(){
$('#searchBar').on('keyup', function(e){
e.preventDefault();
el = $(this).val();
list = $('.suggestedResults');
if(el.length > '3'){
$.ajax({
type: 'POST',
url: 'ajax/SearchController.php',
data: {action: 'lookup' ,q: el},
beforeSend: function(){
list.empty();
},
success: function(response){
var data = JSON.parse(response);
$.each(data, function(i, item){
list.append('<li class="suggestions-list"><a class="s-link" href="profile.php?'+data[i].id+'">'+data[i].fname+' '+data[i].lname+'</a></li>');
});
}
});
}
});
}
</script>
【问题讨论】: