At 04:16 PM 7/8/2008, Philip Thompson wrote:
>On Jul 8, 2008, at 11:55 AM, TK wrote:
>>I'd like to use a PDO prepared statement to perform a MySQL query  
>>that uses the IN function.
>>$stmt = $pdo->prepare('
>>  select *
>>  from mytable
>>  where myfield IN (:contents)
>>$stmt->bindValue(':contents', $contents);
>>Here's the problem:
>>If $contents is set to a single value, everything's fine:
>>  $contents = 'mystring';
>>How can I include multiple values in here?  If $contents is set to  
>>an array, PHP throws an "Array to string conversion" notice.
>>i.e. $contents = array('mystring1', 'mystring2');
>>If $contents is set to a comma-separated list, no matches are  
>>returned (probably because the entire "list" is being passed to  
>>MySQL as a single value, not multiple values).
>>I.e. $contents = 'mystring1,mystring2';
>>What's the proper way to do this?  Can it be done?  (Note that I do  
>>not know how many elements will be in $contents ahead of time, so  
>>something like IN (:contents1, :contents2) wouldn't make sense.)
>>Thanks for any help!
>>- TK
>$contents = array('string1', 'string2', 'string3');
>$ins = implode (',', $contents);
>$sql = "SELECT * FROM `table` WHERE `field` IN ($ins)";
>I'm not sure if the IN function only works on numeric values or if it  
>also works on strings as well. If contents contains strings, you may  
>need to put single quotes around each item. If so, change the above  
>$ins = "'" . implode ("','", $contents) . "'";
>Hope that helps,

Thanks.  That's how to use the IN function in the first place, which I already 
know.  What I was asking about was how to do this using PDO and prepared 
statements.  It's the PDO prepared statement functionality that's got me stuck. 
 The issue is that I can't figure out how to bindParam or bindValue in this 
situation, where there is potentially a list of values (of arbitrary size).

- TK 

PHP Database Mailing List (
To unsubscribe, visit:

Reply via email to