Middag heren,

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


<?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?

<?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?
Als alle waardes int zijn dan kan je ze gewoon typecasten, array imploden en in de query plakken.
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.

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)
Strenger zijn lijkt me nog beter: als $_POST een ongeldige waarde bevat, dan helemaal geen query uitvoeren.
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.

^

Reageren