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

