diff --git a/reference/pdo/pdostatement/fetch.xml b/reference/pdo/pdostatement/fetch.xml
index 230380721edb..8abea7a731dc 100644
--- a/reference/pdo/pdostatement/fetch.xml
+++ b/reference/pdo/pdostatement/fetch.xml
@@ -11,141 +11,172 @@
&reftitle.description;
publicmixedPDOStatement::fetch
- intmodePDO::FETCH_DEFAULT
- intcursorOrientationPDO::FETCH_ORI_NEXT
+ intmodePDO::FETCH_DEFAULT
+ intcursorOrientationPDO::FETCH_ORI_NEXTintcursorOffset0
-
- Fetches a row from a result set associated with a PDOStatement object. The
- mode parameter determines how PDO returns
- the row.
-
+
+ Fetches a row from a result set associated with a
+ PDOStatement instance.
+ The mode parameter determines how PDO returns the row.
+
&reftitle.parameters;
-
-
-
- mode
-
-
- Controls how the next row will be returned to the caller. This value
- must be one of the PDO::FETCH_* constants,
- defaulting to value of PDO::ATTR_DEFAULT_FETCH_MODE
- (which defaults to PDO::FETCH_BOTH).
-
-
- PDO::FETCH_ASSOC: returns an array indexed by column
- name as returned in your result set
-
-
- PDO::FETCH_BOTH (default): returns an array indexed by
- both column name and 0-indexed column number as returned in your
- result set
-
-
- PDO::FETCH_BOUND: returns &true; and assigns the
- values of the columns in your result set to the PHP variables to which
- they were bound with the PDOStatement::bindColumn
- method
-
-
- PDO::FETCH_CLASS: returns a new instance of the
- requested class. The object is initialized by mapping the columns of
- the result set to properties in the class. This occurs before the
- constructor is called, allowing properties to be populated regardless
- of their visibility or whether they are marked as readonly.
- If a property does not exist in the class, the magic __set()
+
+
+ mode
+
+
+ Controls how the next row will be returned to the caller.
+ This value must be one of the
+ PDO::FETCH_* constants,
+ defaulting to value of PDO::ATTR_DEFAULT_FETCH_MODE
+ (which defaults to PDO::FETCH_BOTH).
+
+
+
+ PDO::FETCH_ASSOC: returns an array indexed by
+ column name as returned in the result set.
+
+
+
+
+ PDO::FETCH_NAMED: returns an array with the same
+ form as PDO::FETCH_ASSOC,
+ except that if there are multiple columns with the same name,
+ the value referred to by that key will be an array of all the values
+ in the row that had that column name.
+
+
+
+
+ PDO::FETCH_NUM: returns an array indexed by column
+ number as returned in the result set, starting at column 0.
+
+
+
+
+ PDO::FETCH_BOTH: returns an array indexed by
+ both column name and 0-indexed column number as returned in the
+ result set.
+ This is effectively a combination of
+ PDO::FETCH_NUM and
+ PDO::FETCH_ASSOC.
+
+
+
+
+ PDO::FETCH_BOUND: returns &true; and assigns
+ the values of the columns in the result set to the PHP variables to
+ which they were bound with the
+ PDOStatement::bindColumn method.
+
+
+
+
+ PDO::FETCH_OBJ: returns an instance of
+ stdClass with property names that correspond
+ to the column names returned in the result set.
+
+
+
+
+ PDO::FETCH_CLASS: returns a new instance of the
+ requested class.
+ If PDO::FETCH_CLASSTYPE is included,
+ the class to instantiate is determined by the value of the
+ first column.
+
+
+ By default, the object is initialized by mapping the columns of
+ the result set to properties in the class.
+ This occurs prior to calling the constructor,
+ allowing properties to be populated regardless of their visibility
+ or whether they are marked as readonly.
+
+ If a property does not exist in the class, the magic
+ __set()
method will be invoked if it exists; otherwise, a dynamic public
- property will be created. However, when PDO::FETCH_PROPS_LATE
- is also given, the constructor is called before
- the properties are populated. If mode includes
- PDO::FETCH_CLASSTYPE (e.g.
- PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE), the name
- of the class is determined from the value of the first column.
-
-
- PDO::FETCH_INTO: updates an existing instance
+ property will be created.
+
+
+ It is possible to change this behaviour by using the
+ PDO::FETCH_PROPS_LATE flag to call the
+ constructor before the properties are populated.
+
+
+
+ The properties that will be populated are not
+ passed as parameters to the constructor, regardless of the flag
+ PDO::FETCH_PROPS_LATE being used or not.
+
+
+
+
+
+ PDO::FETCH_INTO: updates an existing instance
of the requested class, mapping the columns of the result set to
- named properties in the class
-
-
- PDO::FETCH_LAZY: combines
- PDO::FETCH_BOTH and PDO::FETCH_OBJ,
+ named properties in the class.
+
+
+
+
+ PDO::FETCH_LAZY: combines
+ PDO::FETCH_BOTH and
+ PDO::FETCH_OBJ,
and is returning a PDORow object
which is creating the object property names as they are accessed.
-
-
- PDO::FETCH_NAMED: returns an array with the same
- form as PDO::FETCH_ASSOC, except that if there are
- multiple columns with the same name, the value referred to by that
- key will be an array of all the values in the row that had that
- column name
-
-
- PDO::FETCH_NUM: returns an array indexed by column
- number as returned in your result set, starting at column 0
-
-
- PDO::FETCH_OBJ: returns an anonymous object with
- property names that correspond to the column names returned in your
- result set
-
-
- PDO::FETCH_PROPS_LATE: when used with
- PDO::FETCH_CLASS, the constructor of the class is
- called before the properties are assigned from the respective column
- values.
-
-
-
-
-
-
- cursorOrientation
-
-
- For a PDOStatement object representing a scrollable cursor, this
- value determines which row will be returned to the caller. This value
- must be one of the PDO::FETCH_ORI_* constants,
- defaulting to PDO::FETCH_ORI_NEXT. To request a
- scrollable cursor for your PDOStatement object, you must set the
- PDO::ATTR_CURSOR attribute to
- PDO::CURSOR_SCROLL when you prepare the SQL
- statement with PDO::prepare.
-
-
-
-
- cursorOffset
-
-
- For a PDOStatement object representing a scrollable cursor for which
- the cursorOrientation parameter is set to
- PDO::FETCH_ORI_ABS, this value specifies the
- absolute number of the row in the result set that shall be fetched.
-
-
- For a PDOStatement object representing a scrollable cursor for which
- the cursorOrientation parameter is set to
- PDO::FETCH_ORI_REL, this value specifies the
- row to fetch relative to the cursor position before
- PDOStatement::fetch was called.
-
-
-
-
-
+
+
+
+
+
+
+
+ cursorOrientation
+
+
+ For a PDOStatement object representing a
+ scrollable cursor, this value determines which row will be returned
+ to the caller. This value must be one of the
+ PDO::FETCH_ORI_*
+ constants, defaulting to PDO::FETCH_ORI_NEXT.
+ To request a scrollable cursor for the
+ PDOStatement object,
+ the PDO::ATTR_CURSOR attribute must be set to
+ PDO::CURSOR_SCROLL when the SQL statement is
+ prepared with PDO::prepare.
+
+
+
+
+ cursorOffset
+
+
+ If the value of the cursorOrientation parameter
+ is PDO::FETCH_ORI_ABS, this value specifies the
+ absolute number of the row in the result set that shall be fetched.
+
+
+ If the value of the cursorOrientation parameter
+ is PDO::FETCH_ORI_REL, this value specifies the
+ row to fetch relative to the cursor position before
+ PDOStatement::fetch was called.
+
+
+
+
&reftitle.returnvalues;
-
+
The return value of this function on success depends on the fetch type. In
all cases, &false; is returned on failure or if there are no more rows.
-
+
@@ -155,74 +186,95 @@
&reftitle.examples;
-
- Fetching rows using different fetch styles
-
+
+ Fetching rows using different fetch styles
+
prepare("SELECT name, colour FROM fruit");
+$db = new PDO('sqlite::memory:');
+$db->exec("CREATE TABLE fruit (name VARCHAR(100), colour VARCHAR(100))");
+$db->exec("INSERT INTO fruit (name, colour) VALUES
+ ('apple', 'red'),
+ ('banana', 'yellow'),
+ ('orange', 'orange'),
+ ('kiwi', 'green')");
+$sth = $db->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Exercise PDOStatement::fetch styles */
-print "PDO::FETCH_ASSOC: ";
-print "Return next row as an array indexed by column name\n";
+echo "PDO::FETCH_ASSOC: ";
+echo "Return next row as an array indexed by column name\n";
$result = $sth->fetch(PDO::FETCH_ASSOC);
-print_r($result);
-print "\n";
+var_dump($result);
+echo "\n";
-print "PDO::FETCH_BOTH: ";
-print "Return next row as an array indexed by both column name and number\n";
+echo "PDO::FETCH_BOTH: ";
+echo "Return next row as an array indexed by both column name and number\n";
$result = $sth->fetch(PDO::FETCH_BOTH);
-print_r($result);
-print "\n";
+var_dump($result);
+echo "\n";
-print "PDO::FETCH_LAZY: ";
-print "Return next row as a PDORow object with column names as properties\n";
+echo "PDO::FETCH_LAZY: ";
+echo "Return next row as a PDORow object with column names as properties\n";
$result = $sth->fetch(PDO::FETCH_LAZY);
-print_r($result);
-print "\n";
+var_dump($result);
+echo "\n";
-print "PDO::FETCH_OBJ: ";
-print "Return next row as an anonymous object with column names as properties\n";
+echo "PDO::FETCH_OBJ: ";
+echo "Return next row as an stdClass object with column names as properties\n";
$result = $sth->fetch(PDO::FETCH_OBJ);
-print $result->name;
-print "\n";
+var_dump($result);
+echo "\n";
?>
]]>
-
- &example.outputs;
-
+
+ &example.outputs;
+
apple
- [colour] => red
-)
+array(2) {
+ ["name"]=>
+ string(5) "apple"
+ ["colour"]=>
+ string(3) "red"
+}
PDO::FETCH_BOTH: Return next row as an array indexed by both column name and number
-Array
-(
- [name] => banana
- [0] => banana
- [colour] => yellow
- [1] => yellow
-)
+array(4) {
+ ["name"]=>
+ string(6) "banana"
+ [0]=>
+ string(6) "banana"
+ ["colour"]=>
+ string(6) "yellow"
+ [1]=>
+ string(6) "yellow"
+}
PDO::FETCH_LAZY: Return next row as a PDORow object with column names as properties
-PDORow Object
-(
- [name] => orange
- [colour] => orange
-)
+object(PDORow)#3 (3) {
+ ["queryString"]=>
+ string(30) "SELECT name, colour FROM fruit"
+ ["name"]=>
+ string(6) "orange"
+ ["colour"]=>
+ string(6) "orange"
+}
PDO::FETCH_OBJ: Return next row as an anonymous object with column names as properties
-kiwi
+object(stdClass)#4 (2) {
+ ["name"]=>
+ string(4) "kiwi"
+ ["colour"]=>
+ string(5) "green"
+}
+
]]>
-
-
- Fetching rows with a scrollable cursor
-
+
+
+
+ Fetching rows with a scrollable cursor
+
]]>
-
- &example.outputs;
-
+
+ &example.outputs;
+
-
-
+
+
- Construction order
-
- When objects are fetched via PDO::FETCH_CLASS, the object
- properties are assigned first, and then the constructor of the class is
- invoked. However, when PDO::FETCH_PROPS_LATE is also given,
- this order is reversed, i.e. first the constructor is called, and
- afterwards the properties are assigned.
-
-
+
+ Construction order
+
+ When objects are fetched via PDO::FETCH_CLASS, the object
+ properties are assigned first, and then the constructor of the class is
+ invoked. However, when PDO::FETCH_PROPS_LATE is also given,
+ this order is reversed, i.e. first the constructor is called, and
+ afterwards the properties are assigned.
+
+
fetch();
$person->tell();
?>
]]>
-
- &example.outputs.similar;
-
+
+ &example.outputs.similar;
+
-
-
-
+
+
&reftitle.seealso;
-
-
- PDO::prepare
- PDOStatement::execute
- PDOStatement::fetchAll
- PDOStatement::fetchColumn
- PDOStatement::fetchObject
- PDOStatement::setFetchMode
-
-
+
+ PDO::prepare
+ PDOStatement::execute
+ PDOStatement::fetchAll
+ PDOStatement::fetchColumn
+ PDOStatement::fetchObject
+ PDOStatement::setFetchMode
+