PDO Prepared Statement voor een IN() query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris -

Chris -

18/01/2014 20:18:35
Quote Anchor link
Middag heren,

Zit met een klein 'probleempje', een limitatie van PDO als het ware. Ik wil het volgende kunnen bereiken (semi-pseudo code)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$keys
= implode(',', $_POST['keys']);
$rslt = Database::fetchAll("SELECT id FROM PREFIX_table WHERE key_id IN(:keys)", array('keys' => $keys));
?>


Probleem is echter dat PDO het ziet als een string, wat op zich logisch is aangezien het daadwerkelijk een string is. Hij moet 'm echter niet als een string zien, omdat de query daardoor ongeldig wordt.

Wat is nu sneller om te doen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$data
= array();
$i = 0;
$in = '';
foreach ($_POST['keys'] as $key) {
    if (is_int($key)) {
        $i++;
        $data['assigned_' . $i] = $key;
    $in .= ':assigned_' . $i . ',';
    }
}

$result = Database::fetchAll("SELECT id FROM PREFIX_table WHERE key_id IN(" . rtrim($in, ',') . ")", $data);
?>


of op een andere manier?
 
PHP hulp

PHP hulp

23/11/2024 23:29:34
 
Erwin H

Erwin H

18/01/2014 23:09:41
Quote Anchor link
Als alle waardes int zijn dan kan je ze gewoon typecasten, array imploden en in de query plakken.
 
Dos Moonen

Dos Moonen

18/01/2014 23:59:36
Quote Anchor link
Die alternatieve manier van je zal niet werken omdat $key nooit een int zal zijn, elke waarde in $_POST (die daar door PHP ingezet is) zal een string zijn. Gebruik ctype_digit() ipv is_int() en cast $key naar een int.
 
Chris -

Chris -

19/01/2014 12:04:58
Quote Anchor link
ah, foutje van mijn kant inderdaad Dos, is_int() moest een andere functie zijn. ging ook meer om de functionaliteit zelf haha. maar dat is dus de enige manier? (-> foreach eroverheen halen)
 
Ward van der Put
Moderator

Ward van der Put

19/01/2014 12:14:14
Quote Anchor link
Strenger zijn lijkt me nog beter: als $_POST een ongeldige waarde bevat, dan helemaal geen query uitvoeren.
 
Dos Moonen

Dos Moonen

19/01/2014 12:56:30
Quote Anchor link
Ward van der Put op 19/01/2014 12:14:14:
Strenger zijn lijkt me nog beter: als $_POST een ongeldige waarde bevat, dan helemaal geen query uitvoeren.

^
 



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.