Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Jak przygotowac lancuch do porownan poprzez LIKE ?
Forum PHP.pl > Forum > Przedszkole
PiXel2.0
Robilem mase roznych testow i okazalo sie, ze najlepszym sposobem na przygotowanie lancucha do porownania poprzez LIKE jest uzycie ponizszych instrukcji:
  1. <?php
  2. $text = addcslashes($text, '%_');
  3. $text = mysql_real_escape_string($text, $db);
  4. $query = "SELECT * FROM tabela WHERE pole LIKE '{$text}'";
  5. ?>

Jednak kiedy warunek bedzie taki:
  1. <?php
  2. $query = "SELECT * FROM tabela WHERE pole LIKE '%{$text}%'";
  3. ?>

To nie dziala gdy probuje znalezc odwrotny ukosnik sad.gif

Jak powinno sie prawidlowo przygotowac lancuch do tego celu questionmark.gif
.radex
Po co Ci addslashes, skoro używasz mysql_real_escape string?
pyro
Cytat(radex_p @ 26.05.2008, 18:24:05 ) *
Po co Ci addslashes, skoro używasz mysql_real_escape string?


Właśnie, bardziej chyba lgoiczne byłoby coś takiego:

  1. <?php
  2.  
  3. {
  4. $text = stripslashes($text);
  5. }
  6. $text = mysql_real_escape_string($text, $db);
  7. $query = "SELECT * FROM tabela WHERE pole LIKE '% $text %'";
  8.  
  9. ?>
PiXel2.0
Nie uzywam addslashes() tylko addcslashes() a lancuch jest juz "czysty" (nie posiada odwrotnych ukosnikow).

Widze, ze nic nie kumacie... sad.gif
Szkoda bo myslalem, ze ktos mi pomoze...
pyro
No to widać miałeś zbyt wielkie nadzieje sadsmiley02.gif
.radex
Nieładnie tak na nas narzekać smile.gif - lepiej być tak ładnie wytłumaczył do czego chciałeś użyć addcslashes i w jaki sposób to miało działać - pomożesz nam w zrozumieniu tego, co chciałeś zrobić, a przez to będziesz miał większą szansę na rozwiązanie problemu smile.gif

btw. pyro - wysoka wartość merytoryczna posta, naprawdę ....
pyro
Cytat(radex_p @ 26.05.2008, 18:44:08 ) *
Nieładnie tak na nas narzekać smile.gif - lepiej być tak ładnie wytłumaczył do czego chciałeś użyć addcslashes i w jaki sposób to miało działać - pomożesz nam w zrozumieniu tego, co chciałeś zrobić, a przez to będziesz miał większą szansę na rozwiązanie problemu smile.gif

btw. pyro - wysoka wartość merytoryczna posta, naprawdę ....


poprostu mi sie nie spodobało to "narzekanie" smile.gif

// KONIEC OFF-TOPA
PiXel2.0
Chodzi o to, ze gdy w zapytaniu SQL porownuje sie lancuchy operatorem = to odwrotne ukosniki sa usuwane jednokrotnie a gdy do porownan stosuje sie LIKE to prawdopodobnie odwrotne ukosniki sa usuwane dwa razy ze wzgledu na znaki % i _ , ale nie do konca to sie sprawdza i wlasnie chodzi o to aby ktos mi wyjasnil kiedy i co jest usuwane abym wiedzial jak przygotowac taki lancuch do porownan przy uzyciu LIKE.
Kicok
Wywal \\ z addcslashes, bo to samo robi już mysql_real_escape_string.
PiXel2.0
Cytat(Kicok @ 27.05.2008, 09:17:43 ) *
Wywal \\ z addcslashes, bo to samo robi już mysql_real_escape_string.


Jesli tak zrobie to odwrotne ukosniki beda zle interpretowane nawet przy takim warunku:
  1. pole LIKE '{$text}'


Ten przyklad ktory podalem w opisie tematu dziala idealnie dla kazdego znaku ale gdy zapytanie jest takie jak wyzej bo dla takiego juz nie:
  1. pole LIKE '%{$text}%'

I nie wiem gdzie jest problem questionmark.gif

P.S.: Zauwazylem, ze kazdy kto do tej pory wypowiadal sie w tym temacie nie ma zielonego pojecia o tym, ze LIKE dziala inaczej niz = i pojedyncze dodanie ukosnikow nic nie daje...
Kicok
No fakt, do LIKE muszą lądować poczwórne ukośniki.

Twój kod wygląda dobrze. Sprawdź jak to będzie wyglądać jeśli w zmiennej $text będziesz miał pojedynczy ukośnik, bo u mnie zapytanie:
  1. SELECT * FROM test3 WHERE kolumna LIKE '%\\\\%'

działa dobrze.
PiXel2.0
No nie bardzo bo jaki pisalem wczesniej jesli mam w polu odwrotny ukosnik to takie cos dziala:
  1. pole LIKE '\\\\'

Dziala taz takie cos jesli mam tekst z x\x:
  1. pole LIKE '%x\\\\x%'

Ale takie cos juz nie dziala:
  1. pole LIKE '%\\\\%'

Dziwne jest jeszcze to, ze takie cos dziala:
  1. pole LIKE '%x\\\\%'

A takie juz nie:
  1. pole LIKE '%\\\\x%'


Nie wiem czy na prawde nikt nie ma pojecia jak uzywac LIKE czy nikomu nie chce sie mi pomoc i napisac o co w tym chodzi questionmark.gif sad.gif
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.