PDOStatement::setFetchMode

(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0)

PDOStatement::setFetchMode Задает режим выборки по умолчанию для объекта запроса

Описание

bool PDOStatement::setFetchMode ( int $mode )
bool PDOStatement::setFetchMode ( int $PDO::FETCH_COLUMN , int $colno )
bool PDOStatement::setFetchMode ( int $PDO::FETCH_CLASS , string $classname , array $ctorargs )
bool PDOStatement::setFetchMode ( int $PDO::FETCH_INTO , object $object )

Список параметров

mode

Режим выборки можно задавать только одной из констант PDO::FETCH_*.

colno

Номер столбца.

classname

Имя класса.

ctorargs

Аргументы конструктора класса.

object

Объект.

Возвращаемые значения

Возвращает 1 в случае успешной установки режима или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Зарание режима выборки

В следующем примере показано, как метод PDOStatement::setFetchMode() меняет режим выборки по умолчанию для объекта PDOStatement.

<?php
$sql 
'SELECT name, colour, calories FROM fruit';
try {
  
$stmt $dbh->query($sql);
  
$result $stmt->setFetchMode(PDO::FETCH_NUM);
  while (
$row $stmt->fetch()) {
    print 
$row[0] . "\t" $row[1] . "\t" $row[2] . "\n";
  }
}
catch (
PDOException $e) {
  print 
$e->getMessage();
}
?>

Результат выполнения данного примера:

apple   red     150
banana  yellow  250
orange  orange  300
kiwi    brown   75
lemon   yellow  25
pear    green   150
watermelon      pink    90

Коментарии

Автор:
PDO::FETCH_CLASS may be used only with this method and it takes up to three parameters then:
 - int mode
 - string className
 - array constructorArgs (optional)

<?php
$stmt 
$pdo -> query('your query');
$stmt -> setFetchMode(PDO::FETCH_CLASS'yourClass', array(=> false));

while(
$row $stmt -> fetch())
{
   
// $row is an object of "yourClass" class
}
$stmt -> closeCursor();
?>

Note also that the constructor is called AFTER the data is set on the object.
2006-02-13 00:55:43
http://php5.kiev.ua/manual/ru/pdostatement.setfetchmode.html
To fetch the rows into an existing instance of a class, use PDO::FETCH_INTO and pass the object as the second parameter. 

The class _must_ have the column names declared as public members, or the script will die. But overloading with __set() and __get() lets it handle any column your query throws at it. 

Set the fetch mode right after you call prepare(). It appears you _must_ use execute() - fetch() won't work. A small example, adapted from ext/pdo/tests/pdo_025.phpt:

<?php
class Test
{
    protected 
$cols;
   
    function 
__set($name$value) {
       
$this->cols[$name] = $value;
    }
   
    function 
__get($name) {
        return 
$this->cols[$name];
    }
}

$obj = new Test();
$db PDOTest::factory();
$stmt $db->prepare("select * from test");
$stmt->setFetchMode(PDO::FETCH_INTO$obj);
$stmt->execute();

foreach (
$stmt as $a) {
   
print_r($a);
}

print_r($obj); // contains the same values as the last iteration above
?>
2006-02-18 05:13:30
http://php5.kiev.ua/manual/ru/pdostatement.setfetchmode.html
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`.
2007-11-19 18:04:24
http://php5.kiev.ua/manual/ru/pdostatement.setfetchmode.html
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
}
?>
2010-07-13 05:16:22
http://php5.kiev.ua/manual/ru/pdostatement.setfetchmode.html
Автор:
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_CLASSName\Space\Class::class);
?>
2017-08-25 00:02:02
http://php5.kiev.ua/manual/ru/pdostatement.setfetchmode.html

    Поддержать сайт на родительском проекте КГБ