Binding parameters for WHERE IN clause with PDO [duplicate]
My code:
$myArray = implode($myArray, ',');
$sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)');
$sth->bindParam(':ids', $myArray);
$sth->execute();
$result = $sth->fetch();
echo $sth->rowCount();
Always shows a count of 1, but when I skip the parametrization and just add the variable itself in it's place, I get an accurate count. What's going on here?
You can't bind a parameter for the IN clause like that. The $myArray string will only count as one value, like if you did this:
SELECT foo FROM bar WHERE ids IN ('1,2,3')
Even though there are three comma delimited values, the database reads them as only one string value.
You need to manually insert the IN list into the query, the old-school way.
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'
There is unfortunately no other way. At least for now.
I know this question is old, but this works for me:
$arrayOfValues = array(1,2,3,4,5);
$questionMarks = join(",", array_pad(array(), count($arrayOfValues), "?"));
$stmt = $dbh->prepare("update some_table set end_date = today where value_no in ($questionMarks)");
$stmt->execute($arrayOfValues);
You simply need a string with as many question marks as you have parameters for your in clause... easily possible
<?php
$sql = "select * from something where id in (".implode(",", array_fill(0, count($parameters), "?")).")";
$sth = $db->prepare($sql);
$sth->execute( $parameters);
?>
精彩评论