if you want to fetch your result into a class (by using PDO::FETCH_CLASS) and want the constructor to be executed *before* PDO assings the object properties, you need to use the PDO::FETCH_PROPS_LATE constant:
<?php
$stmt = $pdo->prepare("your query");
$stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, "className", $constructorArguments);
# pass parameters, if required by the query
$stmt->execute($parameters);
foreach ($stmt as $row)
{
// do something with (each of) your object
}
?>
CARVIEW |
Select Language
HTTP/2 200
server: myracloud
date: Mon, 13 Oct 2025 15:06:58 GMT
content-type: text/html; charset=utf-8
content-language: en
permissions-policy: interest-cohort=()
x-frame-options: SAMEORIGIN
link: ; rel=shorturl
last-modified: Mon, 13 Oct 2025 14:08:23 GMT
content-encoding: gzip
vary: accept-encoding
expires: Mon, 13 Oct 2025 15:06:58 GMT
cache-control: max-age=0
PHP: PDOStatement::setFetchMode - Manual
PDOStatement::setFetchMode
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.0)
PDOStatement::setFetchMode — Set the default fetch mode for this statement
Description
Parameters
mode
-
The fetch mode must be one of the
PDO::FETCH_*
constants. colno
-
Column number.
class
-
Class name.
constructorArgs
-
Constructor arguments.
object
-
Object.
Examples
Example #1 Setting the fetch mode
The following example demonstrates how PDOStatement::setFetchMode() changes the default fetch mode for a PDOStatement object.
<?php
$stmt = $dbh->query('SELECT name, colour, calories FROM fruit');
$stmt->setFetchMode(PDO::FETCH_NUM);
foreach ($stmt as $row) {
print $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
}
The above example will output something similar to:
apple red 150 banana yellow 250 orange orange 300 kiwi brown 75 lemon yellow 25 pear green 150
+add a note
User Contributed Notes 3 notes
Dormilich at netscape dot net ¶
15 years ago
Kats ¶
8 years ago
Something very helpful is knowing how to access namespaces from the function. It took me a minute (and Google) to figure out. The ::class property is going to be your best friend in this case.
<?php
$stmt->setFetchMode(PDO::FETCH_CLASS, Name\Space\Class::class);
?>
stein_AT_rhrk.uni-kl.de ¶
17 years ago
Some note on PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE
It took me some time, to realize, that you can not use this fetch-mode in $stm->setFetchMode(), when you want to retrieve objects from the database whereas the type is defined by the first column in the resultset.
You have to define this mode directly in the $stm->fetch() method.
To make it clearer:
$stm = $pdo->query("SELECT * FROM `foo`);
$stm->setFetchMode(FETCH_CLASS | PDO :: FETCH_CLASSTYPE);
$object = $stm->fetch();
Will not return the expected object, whereas
$stm = $pdo->query("SELECT * FROM `foo`");
$object = $stm->fetch(FETCH_CLASS | PDO :: FETCH_CLASSTYPE);
will give you the object of the class, defined in the first column of `foo`.

↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google