加快实时搜索js,php,mysql

时间:2013-03-30 12:10:25

标签: php javascript

我用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。

所以我的问题是:有没有办法加快搜索速度,或者如果你输入另一个字母,有没有办法停止搜索?

3 个答案:

答案 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> ......