我用php和javascript创建了一个“实时搜索栏”。如果你在搜索栏中输入一个单词,它会搜索数据库(mysql)。
的index.php:
<input type="text" onkeyup="getMovie(this.value)"/>
<div id="movie"></div>
javascript.js:
function getMovie(value) {
$.post("getmovie.php",{partialMovie:value},function(data) {
$("#movie").html(data);
});
}
getmovie.php:
include_once "connection.php";
if($_POST['partialMovie']){
$partialMovie = $_POST['partialMovie'];
$sql = "SELECT title FROM movie WHERE title LIKE '%$partialMovie%'";
$stm = $db->prepare($sql);
$result = $stm->execute(array());
while($row = $stm->fetch(PDO::FETCH_ASSOC)) {
echo "<li>".$row['title']."</li>";
}
}
这样可行,但它是缓慢的方法。我的数据库中只有3部“电影”,但显示结果需要一两秒钟。
这三部电影的标题是:een twee drie。 但如果我快速输入“een”,一秒钟之后你会看到een,twee,drie。一秒钟后你会看到:een twee。又过了一会儿,你看到了:een。所以我的问题是:有没有办法加快搜索速度,或者如果你输入另一个字母,有没有办法停止搜索?
答案 0 :(得分:2)
降低您的期望,因为请求往返的1秒不是很容易改进,或者在页面加载时将数据作为json获取并搜索本地可用的json数据。但如果有很多记录,这可能不是一种选择。
答案 1 :(得分:0)
在使用PDO时,请绑定参数以避免sql注入。
然后在MySQL中使用全文搜索(选择匹配),它将比%%方法快得多。
Doc:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
答案 2 :(得分:0)
<强> HTML 强>:
<input type="text" id="movie-autocomplete"/>
<div id="movie"></div>
<强> JS 强>:
$(document).ready(function(){
$('#movie-autocomplete').keyup(function(){
setTimeout(function(){
$.post(
"getmovie.php",
{
partialMovie: $(this).val()
},
function(data) {
$("#movie").html(data);
}
);
}, 500);
});
});
这将产生一个小延迟并在该字段内发布一个正常值。
<强> PHP 强>:
include_once "connection.php";
if(!empty($_POST['partialMovie'])){
$partialMovie = $_POST['partialMovie'];
$sql = "SELECT title FROM movie WHERE title LIKE :movie ORDER BY title LIMIT 0, 10";
$stm = $db->prepare($sql);
$result = $stm->execute(array(':movie' => "%{$partialMovie}%"));
while($row = $stm->fetch(PDO::FETCH_ASSOC)) {
echo "<li>".$row['title']."</li>";
}
}
我们必须绑定参数以保护SQL查询并阻止SQL注入。此外,您应该确保已将PDO设置为使用实际准备好的语句。
进一步加快所有过程你应该只从PHP返回JSON数据并填入你的JS代码中的<ul>
......