开发者

Binding parameters for WHERE IN clause with PDO [duplicate]

This question already has answers here: 开发者_StackOverflow社区 PHP - Using PDO with IN clause array (9 answers) Closed 10 months ago.

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);
        
        ?>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜