Stel, ik wil alle rijen (ongeacht de inhoud) uit een mysql kolom genaamd Vacht selecteren mbv een formulier.
Wat is de juiste manier om dit te verwerken? Dit is wat ik geprobeerd heb en geen van deze werkt.

if(isset($_GET['Vacht']) and ($_GET['Vacht'] === "alles"))

{ $Vacht = '';}

of {$Vacht = "";}

of {$Vacht = "%";}


of iets anders?
Als je alle rijen wilt ophalen gebruik je gewoon geen WHERE

SELECT * FROM tabelnaam
Of de nodige velden (aan te raden):
SELECT alle,nodige,velden FROM tabelnaam
Hm, je zou het ook zo kunnen maken dat het niet selecteren van een vacht hetzelfde is als alle vachten selecteren? Het netto effect is dat in beide gevallen vacht geen selectiecriterium is. Je kunt dan nog steeds dezelfde oplossing gebruiken - indien je géén specifieke vacht selecteert hoef je deze niet in je WHERE-conditie op te nemen.

Over het dynamisch opbouwen, zoiets:
<?php
$myQuery = 'SELECT <relevante kolommen> FROM <tabel>';
$separator = ' WHERE ';

// Is zoekcritrerium #1 ingesteld?
if (
    isset($_GET['criterium_1'])
    &&
    // en dan hier nog een controle om na te gaan of de waarde toegestaan is...
    // en wellicht nog andere logica die bepaalt of het zinnig is om het argument toe te voegen aan de query
) {
    // argument omgeschreven naar een vorm die hout snijdt in je query
    $argValue = ...;
    $myQuery .= $separator." kolomnaam_criterium_1 = '".mysqli_real_escape_string($link, $argValue);
    $separator = ' AND ';
}

// Is zoekcritrerium #2 ingesteld?
if (
    isset($_GET['criterium_2'])
    &&
    // en dan hier nog een controle om na te gaan of de waarde toegestaan is...
    // en wellicht nog andere logica die bepaalt of het zinnig is om het argument toe te voegen aan de query
) {
    // argument omgeschreven naar een vorm die hout snijdt in je query
    $argValue = ...;
    $myQuery .= $separator." kolomnaam_criterium_2 = '".mysqli_real_escape_string($link, $argValue);
    // omdat op voorhand niet vaststaat welke criteria zijn geselecteerd blijft de volgende regel nodig
    $separator = ' AND ';
}
// et cetera
// ...
// na afloop is $myQuery je opgebouwde query
?>
Is er niet ergens een query object om MySQL te schrijven?
Iets als:
<?php
  $aData = (new cMySQLiQuery())
    ->from('mijntabel')
    ->select('vacht')
    ->execute();
?>

(Maar dan geïmplementeerd :)
Er zijn ongetwijfeld een hoop SQL builders beschikbaar, maar zelfs dan zou de omringende logica (de if-statements voor de criteria) nog steeds hetzelfde zijn lijkt mij? Wat zou daar de toegevoegde waarde van zijn in deze?

Mijn voorbeeld illustreerde slechts een manier en was ook eigenlijk alleen daarvoor bedoeld: illustreren. Als de TS een of meer abstractielagen wil gebruiken, by all means.

Reageren