1

我用 php 和 javascript 制作了一个“实时搜索栏”。如果您在搜索栏中输入一个单词,它将搜索数据库(mysql)。

索引.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);
});
}

获取电影.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。

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

4

3 回答 3

2

要么降低您的期望,因为请求的往返时间为 1 秒并不是很容易改进,要么在页面加载时以 json 格式获取数据并搜索本地可用的 json 数据。但如果有很多记录,这可能不是一个选择。

于 2013-03-30T12:24:49.837 回答
0

使用 PDO 时,请绑定参数以避免 sql 注入。

然后在 MySQL 中使用全文搜索(select match against),会比like %% 的方式快很多。

文档:http ://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

于 2013-03-30T12:19:22.537 回答
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 数据并<ul>在您的 JS 代码中填写...

于 2013-03-30T12:28:51.310 回答