2015-01-19 2 views
0

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

Теперь я пытаюсь построить запрос зависит от того, пустая переменная 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(); 

    } 

И когда я искать и ввести выбрать $ человек и $ пн я получаю эту ошибку

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

спасибо, но теперь им становится недопустимый номер параметра: параметр не был определен -> это указывает на выполнение() –

+0

это не возможно, если вы сделаете это правильно, проверьте, если у вас есть это же число : params_in_sql и привязать параметры, добавить «эхо» в «if», если вы его не видите –

Смежные вопросы