Как сделать поиск в MySQL PHP? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть база данных продуктов MySQL с id, p_name (FULL TEXT), страной, компанией, ценой.Мне нужно сделать динамический поиск на сайте.сейчас у меня такая проблема, когда я запрашиваю результат, я должен ввести точное совпадение имени в базе данных.я пытался поставить%: query%, но когда я выполняю, результат пуст

Модель:

public function getSearchResult($query){
        $params = [
            'query' => $query,
        ];
        // Prepare statement
        $search = $this->db->row("SELECT id, p_name FROM product WHERE p_name LIKE :query", $params);

        return $search;

        }

Контроллер:

public function indexAction(){

        $result = $this->model->getSearchResult($_POST['search']);

        $vars = [
            'result' => $result,
        ];
        $this->view->render('Search', $this->vars + $vars);
    }

Класс БД:

public function query($sql, $params = []){
        $stmt = $this->db->prepare($sql);
        if(!empty($params)){
            foreach ($params as $key => $val) {
                if (is_int($val)) {
                    $type = PDO::PARAM_INT;
                } else {
                    $type = PDO::PARAM_STR;
                }
                $stmt->bindValue(':'.$key, $val, $type);
            }
        }
        $stmt->execute();
        return $stmt;
    }

    public function row($sql, $params = []){
        $result = $this->query($sql, $params);
        return $result->fetchAll(PDO::FETCH_ASSOC);
    }

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете добавить % в значение вашего массива. Измените код вашей модели, как показано ниже:

public function getSearchResult($query){
        $params = [
            ':query' => '%'.$query.'%', // change this line
        ];
        // Prepare statement
        $search = $this->db->row("SELECT id, p_name FROM product WHERE p_name LIKE :query", $params);

        return $search;

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...