PDOStatement::setFetchMode

(no version information, might be only in CVS)

PDOStatement::setFetchMode --  Set the default fetch mode for this statement

说明

bool PDOStatement::setFetchMode ( int mode )

参数

mode

The fetch mode must be one of the PDO_FETCH_* constants.

返回值

Returns 1 on success or FALSE on failure.

范例

例子 1. Setting the fetch mode

The following example demonstrates how PDOStatement::setFetchMode() changes the default fetch mode for a PDOStatement object.

<?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


add a note add a note User Contributed Notes
matt at kynx dot org
18-Feb-2006 07:13
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
?>
Dariusz Kielar
13-Feb-2006 02:55
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(0 => 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.