Функция поиска с использованием PHP и PDO не работает

Я пытаюсь создать функцию поиска на PHP. Я использую следующие функции:

В show.php:

<form class = "form-inline" action = "?controller=address&action=searchAll" method = "post">
    <div class = "form-group row">
        <div class = "col-xs-4">
            <input class = "form-control" id = "terms" name = "terms" type = "text" placeholder = "Search terms">
        </div>
    </div>
    <div class = "form-group row">
        <div class = "col-xs-4">
            <button type = "submit" class = "btn btn-primary" ><span class = "glyphicon glyphicon-search"> </span> Search</button>
        </div>
    </div>
</form>

Эта форма отправляет вызов POST контроллеру: addressController.php

function searchAll(){
if (!empty($_POST['terms'])) {
        $terms=$_POST['terms'];
        $address=Address::searchByTerms($terms);
        $listaAddresses[]=$address;
        //var_dump($id);
        //die();
        require_once('Views/Address/show.php');
    } else {
        $listaAddresses=Address::all();

        require_once('Views/Address/show.php');
    }


}

И контроллер должен вызвать действие searchByTerms для файла модели Address.php, а затем снова открыть show.php, показывая только отфильтрованные элементы:

public static function searchByTerms($terms){
        $db=Db::getConnect();
        $select=$db->prepare('SELECT * FROM tb_direcciones   WHERE fn LIKE "%:fn%"');
        $select->bindValue('fn',$terms);
        $select->execute();

        $addressDb=$select->fetch();


        $address = new Address ($addressDb['id_address'],$addressDb['cia'], $addressDb['fn'], $addressDb['ln'], $addressDb['type'], $addressDb['phone'], $addressDb['fromto'], $addressDb['direccion'], $addressDb['latitud'], $addressDb['longitud']);
        //var_dump($address);
        //die();
        return $address;

    }

Но что-то не так в моем коде, тогда выдается функция ошибки.

Можете выдать ошибку?

Artem Ilchenko 22.11.2018 16:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
58
2

Ответы 2

$select->bindValue(1, "%$terms%", PDO::PARAM_STR);

правильно, но вы должны объявить %$terms% вне bind Value

$terms= "%".$terms."%";
$select->bindValue(1, $terms, PDO::PARAM_STR);

Спасибо за ваше время и усилия, но я полагаю, что проблема не в части кода, связанной с запросами. Он должен быть в некоторых функциях контроллера или модели.

mvasco 22.11.2018 18:08

Извините, что спросил, но action = "?controller=address&action=searchAll" что делать

Abdullah Ockba 22.11.2018 18:46

этот параметр должен вызывать функцию searchAll из контроллера

mvasco 22.11.2018 18:51

пожалуйста. терпите меня, предположим, чтобы вызвать страницу контроллера на той же странице show.php или в другом

Abdullah Ockba 22.11.2018 19:42

Однако, если на той же странице или на другой странице ИСПОЛЬЗУЙТЕ $ _GET для вызова controller = address & action = searchAll И тогда вы можете использовать $ _POST

Abdullah Ockba 22.11.2018 20:35

Я думаю, что ваша функция PDO :: bindValue () неверна.

Согласно документации PHP здесь: http://php.net/manual/es/pdostatement.bindvalue.php, функция bindValue должна принимать в качестве первого аргумента имя параметра в форме

:name

Пример:

bindValue (":name", $value, $data_type);

Так что, возможно, код должен быть таким:

$select=$db->prepare('SELECT * FROM tb_direcciones   WHERE fn LIKE "%:fn%"');

// here the right form
$select->bindValue(':fn', $terms, PDO::PARAM_STR);

Или, если вы хотите использовать форму индекса с вопросительным знаком функции bindValue, решение может быть в форме:

$select=$db->prepare('SELECT * FROM tb_direcciones   WHERE fn LIKE "%?%"');

// here the right form
$select->bindValue(1, $terms, PDO::PARAM_STR);

Спасибо за ваше время и усилия, но я полагаю, что проблема не в части кода, связанной с запросами. Он должен быть в некоторых функциях контроллера или модели.

mvasco 22.11.2018 18:08

нет сообщения об ошибке php, он вызывает функцию ошибки внутри контроллера, это означает, что что-то в любой из обеих функций (контроллер и модель) неверно

mvasco 22.11.2018 18:12

Другие вопросы по теме