В этой записи мы рассмотрим возможные методы извлечения данных из БД. В 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);
// fetchwhile($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);
// fetchwhile($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);
// fetchwhile($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);
// fetchwhile($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 )?>