Функция поиска с использованием PHP и PDO не работает - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь создать функцию поиска в 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;

    }

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

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

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

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

: имя

Пример:

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);
0 голосов
/ 22 ноября 2018

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

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

$terms= "%".$terms."%";
$select->bindValue(1, $terms, PDO::PARAM_STR);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...