Skip to main content
Logo

PDO: Fetch mode примеры

December 25, 2014
ru
fetch pdo-2
This is an archived post from thewebland.net. Content may be outdated.

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