Variabele where clause met bindparam

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gee Bee

Gee Bee

08/09/2015 16:18:03
Quote Anchor link
Mijn korte vraag is: hoe "verwerk" je een variabele where clause in een bindparam constructie.

Iets langere variant:
Heb een variabele $whereclause, waarin een deel van de where clause dynamisch wordt opgebouwd. Afhankelijk van keuzes op het scherm worden daar delen aan toegevoegd dus de ( uiteindelijke ) variabele kan er als volgt uit gaan zien: $whereclause = ' and naam = "Pietje" and plaats = "Amsterdam"'.

Deze dynamische where clause komt achter een vaste where clause waarvan de waarde overigens wél variabel is.

In al mijn naïviteit bouwde ik de query string ( ongeveer ) als volgt "select naam, plaats from tabel where land = :value1 :value2", gevolgd door de lijst van variabelen, waarbij :value2 dus vervangen moest worden door $whereclause. Helaas bleek dit niet te werken, vandaar bovenstaande vraag.

Wellicht ten overvloede: heb dus een functie waaraan de query én de van toepassing zijnde variabelen worden doorgegeven en in deze functie vindt dan de feitelijke bindparam plaats ( bindParam(':value1', $value1, PDO::PARAM_STR etc.)

Gerard
 
PHP hulp

PHP hulp

25/11/2024 03:31:48
 
Jan de Laet

Jan de Laet

09/09/2015 11:23:37
Quote Anchor link
Volgens mij kan dit niet op deze manier.
 
Gee Bee

Gee Bee

09/09/2015 12:37:23
Quote Anchor link
Daar was ik al een beetje bang voor. Heb het nu opgelost door de $whereclause variabele op onderstaande wijze als variabel deel in de query string op te nemen en dat werkt wel.

"select naam, plaats from tabel where land = :value1 ".$whereclause.""

Had juist de "bindparam" constructie toegepast om dat ik begrepen had dat het "direct" combineren van vaste en variabele delen in een query string ( "select naam, plaats from tabel where land = '".$land."' ".$whereclause."" ) "een beetje hackgevoeliger" is. Daarom is het jammer dat ik ook die $whereclause niet daarin kan verwerken.
 
Thomas van den Heuvel

Thomas van den Heuvel

09/09/2015 13:47:30
Quote Anchor link
Je kunt toch enerzijds je querystring opbouwen en anderzijds parameters binden?

Zoiets (vele varianten mogelijk):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
$sql
= 'SELECT * FROM tabel';
$args = array();
$values = array();

if ($zoekParameter1Ingesteld) {
    $args['col1'] = 'co11 = :col1value';
    $values['col1'] = '<de waarde>';
}


if ($zoekParameter2Ingesteld) {
    $args['col2'] = 'col2 = :col2value';
    $values['col2'] = '<de waarde>';
}


// etc.

if (count($args)) {
    $sql .= ' WHERE '.implode(' AND ', $args);
}


$st = $db->prepare($sql);

if (count($args)) {
    foreach ($args as $k => $v) {
        $st->bindValue(':'.$k.'value', $v);
    }
}

// etc.
?>


Niet getest, maar het principe lijkt mij duidelijk? Variant met bindParam zou ook kunnen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.