PHP/SQL: Gehele WHERE-clause vervangen door variabele
Beste mensen,
Ik ben een zoekfuntie aan het maken waarin uitgebreid gezocht kan worden op meerdere criteria, zoals leeftijd (van en tot), nationaliteit, geboorteplaats, enz.
Nu zou ik in PHP voor elke mogelijke combinatie van criteria een aparte sql-query kunnen maken, maar aangezien ik 5 criteria wil gebruiken levert die aanpak enorm veel queries op (namelijk een query voor: criteria 1, criteria 2, criteria 3, criteria 4, criteria 5, criteria 1 + 2, criteria 1 + 3, criteria 1 + 4, criteria 1 + 5, criteria 2 + 3, criteria 2 + 4, criteria 2 + 5, criteria 3 + 4, criteria 3 + 5 , criteria 4 + 5, enz.....)
Kortom: dat is geen doen.
Nu probeer ik dit op te lossen door mijn query dynamisch te maken door hele of gedeeltelijk WHERE-clauses te vergangen met een variable in php.
Bijvoorbeeld:
Standaard zoekquery (alles):
$sql = "SELECT id, achternaam, voornaam FROM tabelnaam";
Uitgebreide zoekquery (met criteria):
$query_toevoeging = "WHERE landID = '1' AND geboorteplaats = 'Den Haag'";
$sql = "SELECT id, achternaam, voornaam FROM tabelnaam '$query_toevoeging'";
Op die manier kan ik dan afhankelijk van de gekozen zoekcriteria de variabele '$query_toevoeging' aanpassen en deze steeds toevoegen aan dezelfde query.
Alleen bovenstaande aanpak werkt niet. Ik krijg dan geen resultaten meer. Dit terwijl bij de 'normale' uitvoering van de query ( sql = "SELECT id, achternaam, voornaam FROM tabelnaam WHERE landID = '1' AND geboorteplaats = 'Den Haag'"; ) ik wel resultaten krijg.
Kan mijn aanpak wel? En zo ja: wat doe ik fout? Zo nee, hoe moet het dan?
Ik ben een zoekfuntie aan het maken waarin uitgebreid gezocht kan worden op meerdere criteria, zoals leeftijd (van en tot), nationaliteit, geboorteplaats, enz.
Nu zou ik in PHP voor elke mogelijke combinatie van criteria een aparte sql-query kunnen maken, maar aangezien ik 5 criteria wil gebruiken levert die aanpak enorm veel queries op (namelijk een query voor: criteria 1, criteria 2, criteria 3, criteria 4, criteria 5, criteria 1 + 2, criteria 1 + 3, criteria 1 + 4, criteria 1 + 5, criteria 2 + 3, criteria 2 + 4, criteria 2 + 5, criteria 3 + 4, criteria 3 + 5 , criteria 4 + 5, enz.....)
Kortom: dat is geen doen.
Nu probeer ik dit op te lossen door mijn query dynamisch te maken door hele of gedeeltelijk WHERE-clauses te vergangen met een variable in php.
Bijvoorbeeld:
Standaard zoekquery (alles):
$sql = "SELECT id, achternaam, voornaam FROM tabelnaam";
Uitgebreide zoekquery (met criteria):
$query_toevoeging = "WHERE landID = '1' AND geboorteplaats = 'Den Haag'";
$sql = "SELECT id, achternaam, voornaam FROM tabelnaam '$query_toevoeging'";
Op die manier kan ik dan afhankelijk van de gekozen zoekcriteria de variabele '$query_toevoeging' aanpassen en deze steeds toevoegen aan dezelfde query.
Alleen bovenstaande aanpak werkt niet. Ik krijg dan geen resultaten meer. Dit terwijl bij de 'normale' uitvoering van de query ( sql = "SELECT id, achternaam, voornaam FROM tabelnaam WHERE landID = '1' AND geboorteplaats = 'Den Haag'"; ) ik wel resultaten krijg.
Kan mijn aanpak wel? En zo ja: wat doe ik fout? Zo nee, hoe moet het dan?
Gewijzigd op 12/09/2017 14:17:54 door Jo Immanuel
Je moet $query_toevoeging ook niet tussen '...' zetten. Waarschijnlijk heb je alle foutmelding uit staan, en zie je de werkelijke melding niet. Ligt eraan wat je gebruikt, maar je kunt mysqli_error() bekijken, of in de PDO attributen \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION meegeven, waardoor je bij syntaxfouten een exception om je oren krijgt die je kunt afvangen.
Geen idee hoe je die $query_toevoeging samenstelt, maar je moet wel op SQL-injectie letten.
Je zou ook iets kunnen doen van:
Geen idee hoe je die $query_toevoeging samenstelt, maar je moet wel op SQL-injectie letten.
Je zou ook iets kunnen doen van:
Perfect het werkt! Dank




