Помогите с кодом php

G
На сайте с 14.08.2014
Offline
28
553

Такая проблема, пытаюсь сделать живой поиск, нашел пример

 function search_autocomplete(){
global $db;
$search = trim(mysqli_real_escape_string($db, $_GET['term']));
$query = "SELECT name FROM st_city WHERE Name LIKE '%{$search}%' LIMIT 10";
$res = mysqli_query($db, $query);
$result_search = array();
while($row = mysqli_fetch_assoc($res)){
$result_search[] = array('label' => $row['name']);
}
return $result_search;
}

if(!empty($_GET['term'])){
$search = search_autocomplete();
exit( json_encode($search) );
}

if(!empty($_GET['search'])){
echo "Поиск по запросу <b>{$_GET['search']}</b>...";
}

Но необходимо переделать его под PDO
@bold function search_autocomplet(){
global $pdo;
$search = trim($_GET['term']);
$query = $pdo->prepare("SELECT name FROM st_city WHERE name LIKE '%{$search}%' LIMIT 10");
$query->execute();
$searchres = $query->fetch(PDO::FETCH_ASSOC);
$result_search = [];
while($row = $searchres){
$result_search[] = array('label' => $row['name']);
}
return $result_search;
}

if(!empty($_GET['term'])){
$search = search_autocomplete();
exit( json_encode($search) );
}

if(!empty($_GET['search'])){
echo "Поиск по запросу <b>{$_GET['search']}</b>...";
}

Но чет не находит в моём примере нужных мне данных. Помогите, пожалуйста, третий день решаю проблему

ДП
На сайте с 23.11.2009
Offline
203
#1


$query = $pdo->prepare("SELECT name FROM st_city WHERE name LIKE ? LIMIT 10");
$query->execute(array('%'.$search.'%'));

но там надо еще вырезать или экранировать знаки процента в самом $search

AS
На сайте с 12.12.2017
Offline
6
#2

Тут лучше наверное использовать просто CODE на не PHP

А то в PHP замены для '[' и ']' -> ***93

Но это видео вопрос в программистам форума

ДП
На сайте с 23.11.2009
Offline
203
#3

Да, где-то есть темы, почему тут такой косяк и почему его не будут исправлять %)

G
На сайте с 14.08.2014
Offline
28
#4

Сорри не заметил сразу ошибки.

Исходный код:

function search_autocomplete(){
global $db;
$search = trim(mysqli_real_escape_string($db, $_GET['term']));
$query = "SELECT name FROM st_city WHERE Name LIKE '%{$search}%' LIMIT 10";
$res = mysqli_query($db, $query);
$result_search = array();
while($row = mysqli_fetch_assoc($res)){
$result_search[] = array('label' => $row['name']);
}
return $result_search;
}

if(!empty($_GET['term'])){
$search = search_autocomplete();
exit( json_encode($search) );
}

if(!empty($_GET['search'])){
echo "Поиск по запросу <b>{$_GET['search']}</b>...";
}

Это то, во что пытаюсь преобразовать:

function search_autocomplet(){
global $pdo;
$search = trim($_GET['term']);
$query = $pdo->prepare("SELECT name FROM st_city WHERE name LIKE '%{$search}%' LIMIT 10");
$query->execute();
$searchres = $query->fetch(PDO::FETCH_ASSOC);
$result_search = [];
while($row = $searchres){
$result_search[] = array('label' => $row['name']);
}
return $result_search;
}

if(!empty($_GET['term'])){
$search = search_autocomplete();
exit( json_encode($search) );
}

if(!empty($_GET['search'])){
echo "Поиск по запросу <b>{$_GET['search']}</b>...";
}
ДП
На сайте с 23.11.2009
Offline
203
#5

http://php.net/manual/ru/pdostatement.fetchall.php вот этот метод надо использовать - он вернет несколько строк,а просто fetch - одну.

Ну и как бы напихают вам там инъекций, если код в таком виде оставите. Используйте плейсхолдеры, раз уж на pdo переписываете

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий