Edit report at https://bugs.php.net/bug.php?id=48431&edit=1

 ID:                 48431
 Comment by:         ssuffic...@php.net
 Reported by:        candrews at integralblue dot com
 Summary:            Support PDO::PARAM_STMT
 Status:             Open
 Type:               Feature/Change Request
 Package:            PDO related
 Operating System:   *
 PHP Version:        5.2.9
 Block user comment: N
 Private report:     N

 New Comment:

I believe the correct syntax would be:

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

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

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

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 
JOIN (
  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 users.name = mytab.username


Previous Comments:
------------------------------------------------------------------------
[2009-05-29 20:08:26] candrews at integralblue dot com

Description:
------------
According to the PDO constants page at 
http://us3.php.net/manual/en/pdo.constants.php , 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.

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

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



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=48431&edit=1

Reply via email to