PDO: Fetch mode примеры

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.