|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #48431 Support PDO::PARAM_STMT
Submitted: 2009-05-29 20:08 UTC Modified: 2011-02-21 20:40 UTC
Avg. Score:4.6 ± 0.7
Reproduced:18 of 18 (100.0%)
Same Version:9 (50.0%)
Same OS:11 (61.1%)
From: candrews at integralblue dot com Assigned:
Status: Open Package: PDO related
PHP Version: 5.2.9 OS: *
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2009-05-29 20:08 UTC] candrews at integralblue dot com
According to the PDO constants page at , PDO::PARAM_STMT "Represents a recordset type. Not currently supported by any drivers." It would be nice if PDO supported this type for all drivers in that don't directly support it using emulation, and for drivers do, using the driver implementation (just like how all the other prepared statement parameter types work).

Reproduce code:
Right now, implementing a prepared statement query involving arrays is (I believe) impossible.

$sth = $dbh->prepare('SELECT *
    FROM users
    WHERE username in :usernames);
$sth->bindParam(":usernames", array("alice","bob","dave"), PDO::PARAM_STMT);

That would be very nice to be able to do - and I believe that is the correct syntax.


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2011-02-21 20:40 UTC]
-Package: Feature/Change Request +Package: PDO related -Operating System: n/a +Operating System: *
 [2011-12-01 06:34 UTC]
I believe the correct syntax would be:

$sth = $dbh->prepare("SELECT * FROM users 
JOIN :usernames as mytab 
on = mytab.username");

$sth2 = $dbh2->execute("select username, userid, accesslevel from permissions where accesslevel='admin'")

$sth->bindParam(":usernames", $sth2, PDO::PARAM_STMT);

PDO::PARAM_ARRAY would make more sense for an associative array argument, which could be used in the same way.

An example prepared statement for either case would be: 
SELECT * FROM users 
  SELECT 'user1' as username, 1 as userid, 'admin' as accesslevel
  UNION ALL SELECT 'user5' as username, 5 as userid, 'admin' as accesslevel
) as mytab 
on = mytab.username
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Sat Oct 31 11:01:24 2020 UTC