pdo расширенный вопрос создания поисковых запросов

Я пытаюсь сделать расширенный поиск, у меня это работало, но я делал полные запросы для каждой переменной get, что было не хорошо, но это работало

Теперь я пытаюсь построить запрос в зависимости от того, пустая ли переменная url. Но я не могу понять, почему это не работает. Запрос работает так, как я это проверил, я правильно строю запрос?

это функция

public function search($man, $mod, $min, $max)
{
$this->currentLocation();
$bind = '';

$query .= 'SELECT listed_watches.*, watch.*, watch_images.* FROM listed_watches';

$query .= 'LEFT JOIN watch ON watch.Id = listed_watches.watchID';

$query .= 'LEFT JOIN watch_images ON listed_watches.url = watch_images.url';

$query .= 'WHERE listed_watches.sellto REGEXP :search';

if(!empty($man)){
$query .= 'AND listed_watches.manufacture = :man';
$bind  .= "$smt->bindValue(':man', $man);";
}

if(!empty($mod)){
$query .= 'AND listed_watches.model = :mod';
$bind  .= "$smt->bindValue(':mod', $mod);";
}

if(!empty($min)){
$query .= 'AND listed_watches.minPrice > :min';
$bind  .= "$smt->bindValue(':min', $min);";
}

if(!empty($max)){
$query .= 'AND listed_watches.maxPrice < :max';
$bind  .= "$smt->bindValue(':max', $max);";
}

$query .= 'GROUP BY listed_watches.id';

$smt = $this->pdo->prepare(''.$query.'');

$smt->bindValue(':search', "^[".$this->userLocation."]");
$bind;
return $smt->fetchAll();

}

И когда я ищу и ввожу выбрать $ man и $ mon, я получаю эту ошибку

Undefined variable: smt
Trying to get property of non-object in

эта ошибка относится к этой строке

$bind  .= "$smt->bindValue(':mod', $mod);";

0

Решение

Сначала вам нужно создать объект $ smt, затем вы можете использовать метод для него.

    if(!empty($man)){
$query .= 'AND listed_watches.manufacture = :man';
}
if(!empty($mod)){
$query .= 'AND listed_watches.model = :mod';
}

// ...

$query .= 'GROUP BY listed_watches.id';

$smt = $this->pdo->prepare(''.$query.'');

$smt->bindValue(':search', "^[".$this->userLocation."]");

if(!empty($man)){
$smt->bindValue(':man', $man);
}
if(!empty($mod)){
$smt->bindValue(':mod', $mod);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector