Hoe zet ik de wildcard in, in deze sql query?

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • roccade
  • Registratie: Januari 2012
  • Laatst online: 07-04 09:21
Mijn vraag
Hoe zet ik twee wildcards in, in deze query?
Ben al uren bezig zonder resultaat....

$sql = 'SELECT * FROM wp_carttradetracker_cat WHERE categorie LIKE "'.$zoekterm.'"';

Relevante software en hardware die ik gebruik
SQL en PHP op Wordpress

Wat ik al gevonden of geprobeerd heb
'%''".$zoekterm."''%'
"%""'.$zoekterm.'""%"
'%" .$serName. "%'
"%' .$zoekterm. '%"
'%" .$serName. "%'"
'%{$text}%'
"'.$zoekterm.'"
"%'.$zoekterm.'%"
'%".$zoekterm."%'

Alle reacties


Acties:
  • +1 Henk 'm!

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

NMe

Quia Ego Sic Dico.

...en die werkte niet? :?

Eventjes logisch nadenken. Wat wil je dat er in die query terecht komt? Een string die begint een eindigt met een %-teken. Hoe ziet dat uit? Een wat betekent dat wanneer je een variabele wil gebruiken?

Even los van dit alles: zoek eens op wat parameterized queries zijn...

'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!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 11-09 18:36

Ventieldopje

I'm not your pal, mate!

PHP:
1
$sql = "SELECT * FROM wp_carttradetracker_cat WHERE categorie LIKE '%{$zoekterm}%'";


Maar inderdaad, kijk eens naar prepared statements.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

Verwijderd

Als ik Google op 'SQL wildcard' dan zie ik het volgende:
SELECT * FROM Customers WHERE City LIKE '%es%'

Het enige wat je nu nog hoeft te doen is dit leesbaar maken voor jouw specifieke taal, eventueel de query nog afsluiten met ; want daar houden sommige SQL versies van.

edit:
ook dit heb ik gevonden met Google. Kennelijk wilt PHP de query tussen "xxxxxxx" en afsluiten met een ; (buiten de statement)

[ Voor 22% gewijzigd door Verwijderd op 14-11-2016 08:52 ]


  • roccade
  • Registratie: Januari 2012
  • Laatst online: 07-04 09:21
thnx all!

  • roccade
  • Registratie: Januari 2012
  • Laatst online: 07-04 09:21
helaas werkt het nog niet hoe ik het wil...

Nu pas ik het toe op een andere tabel en dan werkt ie niet meer.... :(

via myphp werkt dit;
SELECT * FROM `wp_carttradetracker_store` WHERE `description` LIKE '%a%'

via wordpress werkt dit dan weer niet...;
$sql = "SELECT * FROM wp_carttradetracker_store WHERE description LIKE '%a%'";

Wat doe ik verkeerd???
Wordt er moedeloos van

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 00:41

The Eagle

I wear my sunglasses at night

Welke foutmelding krijg je dan via Wordpress? Mijn glazen bol is stuk ;)
Wat trouwens als je die puntkomma aan het einde nou eens weghaalt, of voor de laatste dubbele quote zet? Is die puntkomma uberhaupt nodig?

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11-09 08:54
We hebben inderdaad meer context nodig:

- Welke foutmelding krijg je?

- Wat staat er in de error logs?

- Hoe zet je de connectie op naar MySQL wn werkt die goed?

- Hoe fetch je de results?

- Wat heeft Wordpress ermee te maken?

- Zit de PHP code als een soort plugin in Wordpress?

- Gebruik je de interface van Wordpress naar MySQL?

- Gaat de SQL nog door een andere parser (vb via Wordpress) of direct naar MySQL?

- Wat zie je als je $sql echo-t?

Dat soort zaken zouden helpen bij het zoeken naar een oplossing. In principe zou:

SELECT * FROM `table` WHERE `field` LIKE '%whatever%';

Gewoon moeten werken... De SQL klopt althans.

[ Voor 8% gewijzigd door Morrar op 17-11-2016 23:52 ]


Acties:
  • +1 Henk 'm!

  • Compizfox
  • Registratie: Januari 2009
  • Laatst online: 22:35

Compizfox

Bait for wenchmarks

OK, stop waar je mee bezig bent. Je bent het nu namelijk verkeerd aan het aanleren.

Stop nooit variablen op deze manier in SQL-queries. Dat is onveilig en daar krijg je dit soort taferelen van.

Kijk in plaats daarvan naar parameter binding. https://secure.php.net/manual/en/pdo.prepared-statements.php

Gewoon een heel grote verzameling snoertjes


Acties:
  • 0 Henk 'm!

  • MarcoC
  • Registratie: September 2003
  • Laatst online: 22:30
Compizfox schreef op vrijdag 18 november 2016 @ 00:00:
OK, stop waar je mee bezig bent. Je bent het nu namelijk verkeerd aan het aanleren.

Stop nooit variablen op deze manier in SQL-queries. Dat is onveilig en daar krijg je dit soort taferelen van.

Kijk in plaats daarvan naar parameter binding. https://secure.php.net/manual/en/pdo.prepared-statements.php
One problem at a time.

Acties:
  • +1 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Zijn probleem wordt meteen opgelost als hij parameterized queries gebruikt.

'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!

  • MarcoC
  • Registratie: September 2003
  • Laatst online: 22:30
NMe schreef op vrijdag 18 november 2016 @ 00:08:
[...]

Zijn probleem wordt meteen opgelost als hij parameterized queries gebruikt.
Dat kan, het kan echter m.i. niet zoveel kwaad eerst te leren hoe SQL queries werken zonder abstractielagen toe te voegen. In productie moet je het zo niet gaan gebruiken, maar dat is iets anders.

Acties:
  • 0 Henk 'm!

  • Compizfox
  • Registratie: Januari 2009
  • Laatst online: 22:35

Compizfox

Bait for wenchmarks

MarcoC schreef op vrijdag 18 november 2016 @ 00:14:
[...]

Dat kan, het kan echter m.i. niet zoveel kwaad eerst te leren hoe SQL queries werken zonder abstractielagen toe te voegen. In productie moet je het zo niet gaan gebruiken, maar dat is iets anders.
Prima, maar gebruik dan geen PHP als je puur en alleen wilt leren hoe SQL-queries werken.

Zodra je het gaat toepassen i.c.m. PHP en variabelen in queries gaat stoppen, leer het dan niet op de foute manier aan maar doe het meteen zoals het wel hoort ;)

Zo'n abstractielaag is PDO nou ook weer niet. Het is slecht een DAL, net als mysqli. Mysqli heeft trouwens ook gewoon parameter binding maar ik vind persoonlijk PDO fijner werken.

Dingen als ORM komen later wel uiteraard ;)

[ Voor 22% gewijzigd door Compizfox op 18-11-2016 00:39 ]

Gewoon een heel grote verzameling snoertjes


Acties:
  • +1 Henk 'm!

  • MarcoC
  • Registratie: September 2003
  • Laatst online: 22:30
Compizfox schreef op vrijdag 18 november 2016 @ 00:31:
[...]

Prima, maar gebruik dan geen PHP als je puur en alleen wilt leren hoe SQL-queries werken.

Zodra je het gaat toepassen i.c.m. PHP en variabelen in queries gaat stoppen, leer het dan niet op de foute manier aan maar doe het meteen zoals het wel hoort ;)

Zo'n abstractielaag is PDO nou ook weer niet. Het is slecht een DAL, net als mysqli. Mysqli heeft trouwens ook gewoon parameter binding maar ik vind persoonlijk PDO fijner werken.

Dingen als ORM komen later wel uiteraard ;)
Ik vind deze discussie irrelevant. Elke keer als een beginner op internet met een vraag komt over hoe hij iets moet doen in een bepaalde taal, dan zijn er altijd tientallen zelfbenoemde experts die beweren dat taal A en methode B slecht/ouderwets/onveilig zijn en taal C en methode D veel beter zijn, en dat gaat zo eindeloos door. Zinloze discussie, het enige wat nuttig is, is dat TS aan de slag gaat, en dat doet hij. Prepared statements zijn voor jou misschien niet zo ingewikkeld/abstract, maar voor een beginner die basisvragen stelt zoals OP doet is het wel een grote stap.

Laat hem nou maar eerst dit probleem oplossen, dan kan hij later daarna altijd nog zelf beslissen of hij ook prepared statements wilt leren gebruiken. Het lijkt me zeer stug dat TS een bedrijfskritische applicatie gaat bouwen waarbij SQL injections een groot risico zijn, dus prepared statements zijn nu even helemaal niet nodig. Eerst les 1 afmaken, dan pas aan les 2 beginnen, anders maak je nooit iets af.

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11-09 08:54
Wel eens dat het geen goed idee is om variabelen zo in queries te stoppen. Gezien het gevaar daarvan zou ik het hem ook liever in 1x goed aanleren. Mijn ervaring is dat men anders gewoon tevreden is zodra het werkt en het veiligheidsrisico niet zoet of negeert.

Ik dacht echter dat het SQL statement zonder variabelen ook niet werkte, dus dan lijkt me dat er meer aan de hand is. Lijkt me wel zinnig om eerst zeker te zijn dat je een statische query (dus zonder variabelen maar met wildcards) kunt uitvoeren en de resultaten kunt ophalen...

Acties:
  • 0 Henk 'm!

Verwijderd

Als ik zo naar de queries kijk, dan zie ik ook geen fouten.
Als het bij myphp wel werkt en bij wordpress niet, en ik zo de queries bekijk, dan ben ik geneigt te zeggen, (case sensitive) collation. Alhoewel ik het wel vreemd zou vinden als myphp of wordpress andere collation zou gebruiken.

Misschien hier kijken ?

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Ik gok dat er een niet genoemde sprintf omheen staat en dat de % moet worden ge-escaped... dus probeer eens %%" . $zoekterm . "%%

Acties:
  • +1 Henk 'm!

  • Compizfox
  • Registratie: Januari 2009
  • Laatst online: 22:35

Compizfox

Bait for wenchmarks

MarcoC schreef op vrijdag 18 november 2016 @ 00:55:
[...]

Ik vind deze discussie irrelevant.
De discussie is helemaal niet irrelevant, omdat het probleem van TS toevallig juist samenhangt met deze kwestie, zoals NMe al terecht opmerkte.
Elke keer als een beginner op internet met een vraag komt over hoe hij iets moet doen in een bepaalde taal, dan zijn er altijd tientallen zelfbenoemde experts die beweren dat taal A en methode B slecht/ouderwets/onveilig zijn en taal C en methode D veel beter zijn, en dat gaat zo eindeloos door.
Zal best, maar in dit geval zijn het geen subjectieve opvattingen. Direct variabelen in SQL-queries proppen is fout en verkeerd. Je gaat geen enkele 'echte expert' vinden die het daarmee oneens is.
Zinloze discussie, het enige wat nuttig is, is dat TS aan de slag gaat, en dat doet hij. Prepared statements zijn voor jou misschien niet zo ingewikkeld/abstract, maar voor een beginner die basisvragen stelt zoals OP doet is het wel een grote stap.
Het valt me op dat jij prepared statements lijkt te zien als 'moeilijker' en 'niet geschikt voor beginners' . Dat is niet zo. Prepared statements zijn juist onderdeel van de basisstof, en de methode die beginners meteen aan zouden moeten leren.
Laat hem nou maar eerst dit probleem oplossen, dan kan hij later daarna altijd nog zelf beslissen of hij ook prepared statements wilt leren gebruiken. Het lijkt me zeer stug dat TS een bedrijfskritische applicatie gaat bouwen waarbij SQL injections een groot risico zijn, dus prepared statements zijn nu even helemaal niet nodig. Eerst les 1 afmaken, dan pas aan les 2 beginnen, anders maak je nooit iets af.
Ik ga er vanuit dat TS niet PHP en SQL wil leren voor de lol, maar omdat hij het wil gaan toepassen. De stof die hij nu geleerd heeft kan hij niet veilig toepassen. Dit zal vast niet meteen een bedrijfskritische applicatie zijn, maar toch.

Ik zie gewoon niet in waarom je het niet op de juiste manier zou willen aanleren, in plaats van eerste een verkeerde, onveilige methode aan te leren om er later achter te komen dat je het al die tijd fout hebt gedaan.

Ik vermoed ook dat TS een outdated tutorial of iets dergelijks aan het volgen is aangezien geen enkele recente PHP tutorial je dit nog zo aanleert.

Gewoon een heel grote verzameling snoertjes


Acties:
  • 0 Henk 'm!

  • roccade
  • Registratie: Januari 2012
  • Laatst online: 07-04 09:21
thnx voor alle reacties!

dit werkt (gedeeltelijk);
$sql = "SELECT name FROM table WHERE name LIKE '%{$zoekterm}%'";

Echter werkt het alleen als ik 3 óf meer karakters als zoekterm gebruik.
Zodra ik 1 of 2 karakters gebruik doet hij niets en geeft hij een foutmelding....

Echter werkt dit weer wel met 1 of 2 karakters;
$sql = "SELECT name FROM table WHERE name LIKE '%{$zoekterm}'";
$sql = "SELECT name FROM table WHERE name LIKE '{$zoekterm}%'";
$sql = "SELECT name FROM table WHERE name LIKE '{$zoekterm}'";

Iemand enig idee?
hierna ga ik dan kijken naar parameterized queries :)
Pagina: 1