PHP и Jquery мгновенный поиск SQLite запрос - PullRequest
0 голосов
/ 14 октября 2018

У меня есть этот код для мгновенного поиска, как в Google.Код должен запрашивать базу данных для соответствующего термина, в моем случае имя и фамилия пользователя.Я использовал синтаксис 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>

1 Ответ

0 голосов
/ 14 октября 2018
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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...