Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Jak przygotowac lancuch do porownan poprzez LIKE ?
PiXel2.0
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

Ostrzeżenie: (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

Ten post edytował PiXel2.0 26.05.2008, 15:53:50
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
.radex
post
Post #2





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

Ostrzeżenie: (0%)
-----


Po co Ci addslashes, skoro używasz mysql_real_escape string?


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
pyro
post
Post #3





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował pyro 26.05.2008, 17:37:44


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
PiXel2.0
post
Post #4





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

Ostrzeżenie: (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...
Go to the top of the page
+Quote Post
pyro
post
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


No to widać miałeś zbyt wielkie nadzieje sadsmiley02.gif


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
.radex
post
Post #6





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

Ostrzeżenie: (0%)
-----


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ę ....


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
pyro
post
Post #7





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
PiXel2.0
post
Post #8





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

Ostrzeżenie: (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.
Go to the top of the page
+Quote Post
Kicok
post
Post #9





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


Wywal \\ z addcslashes, bo to samo robi już mysql_real_escape_string.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
PiXel2.0
post
Post #10





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

Ostrzeżenie: (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...
Go to the top of the page
+Quote Post
Kicok
post
Post #11





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
PiXel2.0
post
Post #12





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

Ostrzeżenie: (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

Ten post edytował PiXel2.0 28.05.2008, 09:40:14
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 11:42