Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]BindValue i nie działający LIKE
Forum PHP.pl > Forum > Przedszkole
Arhimenrius
Problem dokładnie jak w temacie. Tworzę sobie klasę do obsługi zapytań MySQL, aczkolwiek nie działa mi LIKE. Za to AND działa znakomicie. Przeglądnąłem kilka stron i nie udało się rozwiązać problemu. Aczkolwiek błędu nie wyrzuca.
  1. //budowanie zapytania
  2. public function BuildSearchQuery($way='AND')
  3. {
  4.  
  5. $query = 'SELECT * FROM `'.$this->tablename.'` WHERE ';
  6. for($i=0;$i<$this->howcolumn;$i++)
  7. {
  8. $query .= '`'.$this->column[$i].'` = :'.$this->column[$i].' '.$way.' ';
  9. }
  10. if($way=='AND')
  11. $query = substr($query,0,-4);
  12. elseif($way=='LIKE')
  13. $query = substr($query,0,-5);
  14.  
  15. $this->query = $query;
  16. $this->way = $way;
  17.  
  18. }
  19.  
  20. //wykonanie zadania
  21. public function Search($option='one')
  22. {
  23.  
  24. global $db;
  25. $search = $db -> prepare("$this->query");
  26. if($this->way=='AND')
  27. {
  28. for($i=0;$i<$this->howcolumn;$i++)
  29. {
  30. $search -> bindValue($this->column[$i],$this->searchvar[$i], PDO::PARAM_STR);
  31. }
  32. echo 't';
  33. }
  34. elseif($this->way=='LIKE')
  35. {
  36. for($i=0;$i<$this->howcolumn;$i++)
  37. {
  38. $search -> bindValue($this->column[$i],'%'.$this->searchvar[$i].'%', PDO::PARAM_STR);
  39. }
  40.  
  41. }
  42.  
  43. $search -> execute();
  44.  
  45. if($option=='one')
  46. {
  47. $row = $search -> fetch(PDO::FETCH_ASSOC);
  48. }
  49. elseif($option=='multi')
  50. {
  51. $row = $search -> fetchAll(PDO::FETCH_ASSOC);
  52. }
  53. $this -> find = $row;
  54. }
  55.  
  56. }
  57. ?>


A plik gdzie się odwołuję ma:
  1. $request -> AddTablename('users');
  2. $request -> AddColumn(array('usclass'));
  3. $request -> AddSearchVar(array('4'));
  4. $request -> BuildSearchQuery('LIKE');
  5. $request -> Search('multi');
  6. print_r($request->find);


print_r zwraca tylko Array(). Przy tworzeniu bindValue, searchvar[$i], w tym przypadku 0, ma wartość 4. Więc względnie powinno być %4%, więc powinno wyszukać. A jednak zwraca pustą tablice...
b4rt3kk
LIKE służy do porównywania stringów, nie jako łącznik pomiędzy warunkami.

Spróbuj dać jako argument funkcji OR, a nie LIKE. LIKE możesz użyć zamiast znaku równości.
Arhimenrius
Kurde... Dzięki :3 Jednak pora iść spać bo całkowicie się robić nie da... tak to jest jak się z dnia na dzień człowiek po pół roku na nowo weźmie.... Jeszcze raz dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.