|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #54964 PDO does not use defined class, but instead returns anonymous class
Submitted: 2011-05-31 16:34 UTC Modified: 2014-01-01 12:44 UTC
From: daveb at bulmore dot net Assigned:
Status: Open Package: PDO MySQL
PHP Version: 5.3.6 OS:
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
Block user comment
Status: Assign to:
Bug Type:
From: daveb at bulmore dot net
New email:
PHP Version: OS:


 [2011-05-31 16:34 UTC] daveb at bulmore dot net
PDO fetch object methods do not use the class defined:

  // not used, but should be
  class User {
    public $username;
    public $first_name;
    public $last_name;
    public $created;

  $stmt->setFetchMode(PDO::FETCH_CLASS, 'User');

  $obj = $stmt->fetch(); //returns anonymous class

but instead use a generated anonymous class based on the select statement.

Test script:
  class User {
    public $username;
    public $first_name;
    public $last_name;
    public $created;

  $dbh = new PDO("mysql:host=localhost;dbname=testdb;", "test", "test");

  $stmt = $dbh->query('select * from users');

  $stmt->setFetchMode(PDO::FETCH_CLASS, 'User');
  foreach ($stmt as $obj)       //or while ($obj = $stmt->fetch())
      echo $obj->username, " ",
           $obj->first_name, " ",
           $obj->last_name, " ",
           $obj->role, " ",
           $obj->verified, " ",
           $obj->trusted, " ",
           $obj->created, "\n";

  $dbh = null;

CREATE TABLE `users` (
  `username` varchar(40) NOT NULL,
  `password` varchar(40) NOT NULL,
  `first_name` varchar(40) DEFAULT NULL,
  `last_name` varchar(60) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `role` varchar(20) NOT NULL DEFAULT 'user',
  `verified` varchar(50) NOT NULL DEFAULT 'false',
  `trusted` varchar(5) NOT NULL DEFAULT 'false',
  PRIMARY KEY (`username`)

Expected result:
Should get an instance of:

  class User {
    public $username;
    public $first_name;
    public $last_name;
    public $created;

and an error when trying to access the properties:


Actual result:
Returns an anonymous class with anything that's defined in the select statement.


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2011-06-02 07:04 UTC] daveb at bulmore dot net
It appears that the PDO methods return the class, but may also be proxying values from the database.  So there may or may not be a problem.
 [2014-01-01 12:44 UTC]
-Package: PDO related +Package: PDO MySQL
PHP Copyright © 2001-2018 The PHP Group
All rights reserved.
Last updated: Sun Nov 19 01:31:42 2017 UTC