【问题标题】:PHP and Jquery instant search SQLite queryPHP 和 Jquery 即时搜索 SQLite 查询
【发布时间】: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+'&nbsp;'+data[i].lname+'</a></li>');
                    });
                }
            });
        }

    });

}

</script>

【问题讨论】:

    标签: php jquery sqlite search


    【解决方案1】:
    SELECT id, fname, lname FROM teachers WHERE fname LIKE ? OR lname LIKE ?
    

    这个查询有两个参数。

    $q = filter_var(...);
    $stmt->execute(array($q));
    

    但是你只给它一个参数,所以第二个是NULL。

    如果您想对两个 LIKE 使用相同的搜索模式,请指定两次:

    $stmt->execute(array($q, $q));
    

    【讨论】:

    • 谢谢,问题解决了,是我写代码的错误,忘记了这两个参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多