В этой записи мы рассмотрим возможные методы извлечения данных из БД. В mysql, как мы знаем есть mysql_fetch_row(), mysql_fetch_array(), mysql_fetch_assoc().
Посмотрим как єто реализуется в PDO.
PDOStatement::fetch
public mixed PDOStatement::fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] )
Выбирает строку из результирующего набора, связанного с объектом PDOStatement.Fetch_style параметр определяет, как PDO возвращает строку.
Параметры
fetch_style – Управляет тем, как следующая строка будет возвращена в вызывающую программу. Это значение должно быть одним из PDO :: FETCH_ * констант, по умолчанию значение PDO :: ATTR_DEFAULT_FETCH_MODE (который по умолчанию PDO :: FETCH_BOTH).
PDO::FETCH_ASSOC: возвращает массив, индексированный по колонке именем вернулся в результирующий набор
PDO::FETCH_BOTH (default): возвращает массив, индексированный по обе имя столбца и 0-индексированные номер столбца, как вернулся в результирующий набор
PDO::FETCH_BOUND: возвращает TRUE, и присваивает значения столбцов в наборе результатов на PHP переменных, к которым они были связаны с методом PDOStatement::bindColumn()
PDO::FETCH_CLASS: возвращает новый экземпляр запрашиваемого класса, отображение столбцов результирующего набора для именованных свойств в классе. Если fetch_style включает PDO :: FETCH_CLASSTYPE (например, PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE), то имя класса определяется из значения первого столбца.
PDO::FETCH_INTO: обновляет существующий экземпляр запрашиваемого класса, отображение столбцов результирующего набора для именованных свойств в классе
PDO::FETCH_LAZY: сочетает в себе PDO :: FETCH_BOTH и PDO :: FETCH_OBJ, создавая имена объектов переменных, зависит от того как к ним обращались
PDO::FETCH_NAMED: возвращает массив в той же форме что и PDO :: FETCH_ASSOC, кроме того, что, если существует несколько столбцов с одинаковым именем, значение, указанное в этом ключе будет массив всех значений в строке, которые имели имя столбца
PDO::FETCH_NUM: возвращает массив, индексированный по номеру столбца, как вернулся в результирующий набор, начиная со столбца 0
PDO::FETCH_OBJ: возвращает анонимный объект с именами свойств, которые соответствуют именам столбцов, возвращаемых в результирующем наборе
Простой код:
<?php // configuration $dbtype = "sqlite"; $dbhost = "localhost"; $dbname = "test"; $dbuser = "root"; $dbpass = "admin"; // database connection $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); // query $sql = "SELECT title FROM books ORDER BY title"; $q = $conn->query($sql); // fetch while($r = $q->fetch()){ print_r($r); } // result //Array ( [title] => PHP AJAX [0] => PHP AJAX ) //Array ( [title] => PHP API [0] => PHP API ) //Array ( [title] => PHP Eclipse [0] => PHP Eclipse ) //Array ( [title] => PHP Prado [0] => PHP Prado ) //Array ( [title] => PHP SEO [0] => PHP SEO ) //Array ( [title] => PHP Web Services [0] => PHP Web Services ) //Array ( [title] => PHP Zend Framework [0] => PHP Zend Framework ) ?>
Fech Association:
// query $sql = "SELECT title FROM books ORDER BY title"; $q = $conn->query($sql); $q->setFetchMode(PDO::FETCH_ASSOC); // fetch while($r = $q->fetch()){ print_r($r); } // result //Array ( [title] => PHP AJAX) //Array ( [title] => PHP API) //Array ( [title] => PHP Eclipse) //Array ( [title] => PHP Prado) //Array ( [title] => PHP SEO) //Array ( [title] => PHP Web Services) //Array ( [title] => PHP Zend Framework)
Fetch Num (как mysql_fetch_row()):
$q->setFetchMode(PDO::FETCH_NUM); // fetch while($r = $q->fetch()){ print_r($r); } // result //Array ( [0] => PHP AJAX ) //Array ( [0] => PHP API ) //Array ( [0] => PHP Eclipse ) //Array ( [0] => PHP Prado ) //Array ( [0] => PHP SEO ) //Array ( [0] => PHP Web Services ) //Array ( [0] => PHP Zend Framework )
Fetch Both (стандарт):
$q->setFetchMode(PDO::FETCH_BOTH); $q = $conn->query($sql); // fetch while($r = $q->fetch()){ print_r($r); } // result //Array ( [title] => PHP AJAX [0] => PHP AJAX ) //Array ( [title] => PHP API [0] => PHP API ) //Array ( [title] => PHP Eclipse [0] => PHP Eclipse ) //Array ( [title] => PHP Prado [0] => PHP Prado ) //Array ( [title] => PHP SEO [0] => PHP SEO ) //Array ( [title] => PHP Web Services [0] => PHP Web Services ) //Array ( [title] => PHP Zend Framework [0] => PHP Zend Framework ) ?>