PDOStatement::fetch
Извлекает строку из результирующего набора.
Синтаксис
mixed PDOStatement::fetch ([ $fetch_style[, $cursor_orientation[, $cursor_offset]]] );
Параметры
$fetch_style: необязательный символ (целое число), указывающий формат строки данных. Список возможных значений для $fetch_style см. в разделе "Примечания". Значение по умолчанию — PDO::FETCH_BOTH. $fetch_style в методе "fetch" имеет более высокий приоритет, чем $fetch_style в PDO::query.
$cursor_orientation: необязательный символ (целое число), указывающий извлекаемую строку, когда в инструкции подготовки задано PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL
. Список возможных значений для $cursor_orientation см. в разделе "Примечания". Пример использования прокручиваемого курсора см. в статье PDO::prepare .
$cursor_offset: необязательный символ (целое число), указывающий извлекаемую строку, когда $cursor_orientation имеет значение PDO::FETCH_ORI_ABS или PDO::FETCH_ORI_REL, а PDO::ATTR_CURSOR имеет значение PDO::CURSOR_SCROLL.
Возвращаемое значение
Смешанное значение, которое возвращает строку или значение false.
Замечания
Курсор автоматически перемещается вперед при вызове fetch. Следующая таблица содержит список возможных значений для $fetch_style.
$fetch_style | Description |
---|---|
PDO::FETCH_ASSOC | Указывает массив, индексированный по имени столбца. |
PDO::FETCH_BOTH | Указывает массив, индексированный по имени столбца и с отчетом от нуля. Это значение по умолчанию. |
PDO::FETCH_BOUND | Возвращает значение true и присваивает значения, как указывает PDOStatement::bindColumn. |
PDO::FETCH_CLASS | Создает экземпляр и сопоставляет столбцы с именованными свойствами. Вызовите PDOStatement::setFetchMode перед вызовом fetch. |
PDO::FETCH_INTO | Обновляет экземпляр запрошенного класса. Вызовите PDOStatement::setFetchMode перед вызовом fetch. |
PDO::FETCH_LAZY | Создает имена переменных во время доступа, а также объект без имени. |
PDO::FETCH_NUM | Указывает массив, индексируемый по столбцам с отчетом от нуля. |
PDO::FETCH_OBJ | Указывает объект без имени с именами свойств, сопоставленными с именами столбцов. |
Если курсор находится в конце результирующего набора (последняя строка была извлечена, и курсор вышел за границу результирующего набора) и является курсором последовательного доступа (PDO::ATTR_CURSOR = PDO::CURSOR_FWDONLY), последующий вызов fetch завершается с ошибкой.
Если курсор является прокручиваемым (PDO::ATTR_CURSOR = PDO::CURSOR_SCROLL), fetch перемещает курсор в пределах границ результирующего набора. Следующая таблица содержит список возможных значений для $cursor_orientation.
$cursor_orientation | Description |
---|---|
PDO::FETCH_ORI_NEXT | Извлекает следующую строку. Это значение по умолчанию. |
PDO::FETCH_ORI_PRIOR | Извлекает предыдущую строку. |
PDO::FETCH_ORI_FIRST | Извлекает первую строку. |
PDO::FETCH_ORI_LAST | Извлекает последнюю строку. |
PDO::FETCH_ORI_ABS, номер | Извлекает строку, запрашиваемую в $cursor_offset, по номеру строки. |
PDO::FETCH_ORI_REL, номер | Извлекает строку, запрашиваемую в $cursor_offset, по положению относительно текущей позиции. |
Если значение, указанное для $cursor_offset или $cursor_orientation, приводит к выходу за границу результирующего набора, метод "fetch" не срабатывает.
Добавлена поддержка PDO версии 2.0 драйверов Майкрософт для PHP для SQL Server.
Пример
<?php
$server = "(local)";
$database = "AdventureWorks";
$conn = new PDO( "sqlsrv:server=$server ; Database = $database", "", "");
print( "\n---------- PDO::FETCH_CLASS -------------\n" );
$stmt = $conn->query( "select * from HumanResources.Department order by GroupName" );
class cc {
function __construct( $arg ) {
echo "$arg";
}
function __toString() {
return $this->DepartmentID . "; " . $this->Name . "; " . $this->GroupName;
}
}
$stmt->setFetchMode(PDO::FETCH_CLASS, 'cc', array( "arg1 " ));
while ( $row = $stmt->fetch(PDO::FETCH_CLASS)) {
print($row . "\n");
}
print( "\n---------- PDO::FETCH_INTO -------------\n" );
$stmt = $conn->query( "select * from HumanResources.Department order by GroupName" );
$c_obj = new cc( '' );
$stmt->setFetchMode(PDO::FETCH_INTO, $c_obj);
while ( $row = $stmt->fetch(PDO::FETCH_INTO)) {
echo "$c_obj\n";
}
print( "\n---------- PDO::FETCH_ASSOC -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$result = $stmt->fetch( PDO::FETCH_ASSOC );
print_r( $result );
print( "\n---------- PDO::FETCH_NUM -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$result = $stmt->fetch( PDO::FETCH_NUM );
print_r ($result );
print( "\n---------- PDO::FETCH_BOTH -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$result = $stmt->fetch( PDO::FETCH_BOTH );
print_r( $result );
print( "\n---------- PDO::FETCH_LAZY -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$result = $stmt->fetch( PDO::FETCH_LAZY );
print_r( $result );
print( "\n---------- PDO::FETCH_OBJ -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$result = $stmt->fetch( PDO::FETCH_OBJ );
print $result->Name;
print( "\n \n" );
print( "\n---------- PDO::FETCH_BOUND -------------\n" );
$stmt = $conn->query( "select * from Person.ContactType where ContactTypeID < 5 " );
$stmt->bindColumn('Name', $name);
$result = $stmt->fetch( PDO::FETCH_BOUND );
print $name;
print( "\n \n" );
?>