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; public mixedPDOStatement::fetch - intmodePDO::FETCH_DEFAULT - intcursorOrientationPDO::FETCH_ORI_NEXT + intmodePDO::FETCH_DEFAULT + intcursorOrientationPDO::FETCH_ORI_NEXT intcursorOffset0 - - 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 +