[PHP/MYSQL] Zoeken naar een % teken met LIKE*

Pagina: 1
Acties:
  • 104 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik wil in een mysqldatabase zoeken naar een waarde die een procentteken (%) bevat met een LIKE instructie.

als in de database bijvoorbeeld 25% staat moet deze gevonden worden.

deze query werkt in een mysql database:

code:
1
select test from test where test LIKE '%25\%%'"


Hoe zorg ik dus dat php de \ voor de procent teken zet?

Tnx alvast

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
zoek is op 'escape special characters' of 'magic quotes'
daarin ligt je probleem

verder kan je zoiets prima met google vinden hoor

[ Voor 35% gewijzigd door BasieP op 09-11-2005 18:41 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb gezocht, maar kan geen functie vinden die de % teken escaped. Alle tekens worden ge-escaped behalve % en _

Acties:
  • 0 Henk 'm!

  • b19a
  • Registratie: September 2002
  • Niet online
Maak anders gebruik van Regular Expressions: (weet niet hoe de performance verschilt t.o.v. LIKE)

SELECT * FROM pet WHERE name REGEXP '25%';

meer informatie

[ Voor 73% gewijzigd door b19a op 09-11-2005 18:47 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

To test for literal instances of a wildcard character, precede the character with the escape character. If you do not specify the ESCAPE character, ‘\’ is assumed.
Daarnaast moet je tekens voor PHP zelf ook escapen. Ik verwacht dus dat je dit moet proberen:
PHP:
1
$sql = "SELECT test FROM test WHERE test LIKE '%25\\%%'";

Je escapet dan de \, zodat PHP het als een letterlijk karakter ziet. Vervolgens blijft er voor MySQL nog één \ staan, die de % escapet.

Let wel, ik heb dit niet getest, dus ik weet het niet zeker. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Denker
  • Registratie: Maart 2003
  • Laatst online: 10-09 08:13
Het moet dan toch zijn:
code:
1
select test from test where test LIKE '%25\%%'

Dus wel enkele quotes en twee procenttekens.
Backslash procentteken moet wel goed zijn, die escapet alleen het procentteken wat erna komt, niet die laatste dat een echte procentteken representeert.

[ Voor 32% gewijzigd door Denker op 09-11-2005 18:52 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik weet de query voor mysql wel, maar ik wil dat de procent teken in de variabele ge-escaped wordt...

code:
1
$query = "select test from test where test LIKE '%$variabele%'";

[ Voor 89% gewijzigd door Verwijderd op 09-11-2005 18:55 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
$var = 'waarde%';
$var = str_replace("%", "\%", $var);
$query = "SELECT etc WHERE test LIKE '%".$var."'";


?

[ Voor 90% gewijzigd door Verwijderd op 09-11-2005 19:34 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

@ivy: gebruik dan op zijn minst LIKE, dat zal iets beter gaan. 8)7

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
En nog een % voor de laatste quote (in de sql query) (toch?).

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

-NMe- schreef op woensdag 09 november 2005 @ 18:49:
Daarnaast moet je tekens voor PHP zelf ook escapen. Ik verwacht dus dat je dit moet proberen
\% is echter geen valid escape char tussen single quotes (ook niet voor double overigens, maar dat terzijde), dus als je \% gebruikt dan wordt dat ook letterlijk genomen. Neemt niet weg dat ik het zelf wel netter vind om alsnog die \ te escapen ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Michali schreef op woensdag 09 november 2005 @ 19:31:
En nog een % voor de laatste quote (in de sql query) (toch?).
Inderdaad. :)
.oisyn schreef op woensdag 09 november 2005 @ 20:30:
\% is echter geen valid escape char tussen single quotes (ook niet voor double overigens, maar dat terzijde), dus als je \% gebruikt dan wordt dat ook letterlijk genomen. Neemt niet weg dat ik het zelf wel netter vind om alsnog die \ te escapen ;)
True. Zelf doe ik het in elk geval altijd, dan kan het ook nooit per ongeluk fout gaan. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Ik neem aan dat je query is om een tabel met teksten te doorzoeken. Zo ja, dan is het naar mijn idee altijd wijs om je query case-insensitive te maken:

PHP:
1
$query = "SELECT test FROM test WHERE LOWER(test) LIKE(LOWER('%$variabele%'))";


Wel je indexen ook lowercase maken, anders werken ze niet en worden je queries traag.

[ Voor 13% gewijzigd door JKVA op 09-11-2005 20:47 ]

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Overigens, dit kan niet genoeg gezegd worden...
Heb je aan SQL injection gedacht? Dus dat je gekke waarden aan de URL kan meegeven waardoor je bijvoorbeeld tabellen kwijt bent. Hier op tweakers staan genoeg artikelen over SQL injection :)

Fat Pizza's pizza, they are big and they are cheezy

Pagina: 1