Re: PDO prepared statements and value list for MySQL "IN"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

I.e.:
$stmt = $pdo->prepare('
  select *
  from mytable
  where myfield IN (:contents)
);
$stmt->bindValue(':contents', $contents);
$stmt->execute();

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 to.....

$ins = "'" . implode ("','", $contents) . "'";

Hope that helps,

~Philip


--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux