PDOStatement::fetch
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDOStatement::fetch — Busca a próxima linha de um resultado
Descrição
$mode
= PDO::FETCH_DEFAULT, int $cursorOrientation
= PDO::FETCH_ORI_NEXT, int $cursorOffset
= 0): mixed
Busca uma linha de um resultado associado com um objeto PDOStatement object. O
parâmetro mode
determina como o PDO retorna
a linha.
Parâmetros
mode
-
Controla como a próxima linha será retornada ao chamador. Este valor precisa ser uma das constantes
PDO::FETCH_*
, padronizado para o valor dePDO::ATTR_DEFAULT_FETCH_MODE
(cujo padrão éPDO::FETCH_BOTH
).PDO::FETCH_ASSOC
: retorna um array indexado pelo nome da coluna como retornada no resultadoPDO::FETCH_BOTH
(padrão): retorna um array indexado tanto por nome de coluna quanto por número de coluna indexado em 0, como retornado no resultadoPDO::FETCH_BOUND
: retornatrue
e atribui os valores das colunas no conjunto de resultados às variáveis PHP às quais eles foram vinculados com o método PDOStatement::bindColumn()PDO::FETCH_CLASS
: retorna uma nova instância da classe solicitada, mapeando as colunas do conjunto de resultados às propriedades nomeadas na classe, e chamando o construtor na sequência, a menos quePDO::FETCH_PROPS_LATE
também seja fornecida. Se o parâmetromode
incluir PDO::FETCH_CLASSTYPE (por exemploPDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE
), o nome da classe será determinado a partir do valor da primeira coluna.PDO::FETCH_INTO
: atualiza uma instância existente da classe solicitada, mapeando as colunas do conjunto de resultados às propriedades nomeadas na classePDO::FETCH_LAZY
: combinaPDO::FETCH_BOTH
ePDO::FETCH_OBJ
, e retorna um objeto PDORow que cria os nomes das propriedades do objeto conforme elas são acessadas.PDO::FETCH_NAMED
: retorna um array com a mesma forma dePDO::FETCH_ASSOC
, exceto que se houver múltiplas colunas com o mesmo nome, o valor referenciado pela chave será um array de todos os valores na linha que tiverem esse nome de colunaPDO::FETCH_NUM
: retorna um array indexado por número de coluna como retornado no conjunto de resultados, iniciando na coluna 0PDO::FETCH_OBJ
: retorna um objeto anônimo com nomes de propriedades que correspondem ao nomes de colunas retornados no conjunto de resultadosPDO::FETCH_PROPS_LATE
: quando usado comPDO::FETCH_CLASS
, o construtor da classe é chamado antes que as propriedades sejam atribuídas com os respectivos valores das colunas.
cursorOrientation
-
Para um objeto PDOStatement representando um cursor navegável, este valor determina que linha será retornada ao chamador. Este valor precisa ser uma das constantes
PDO::FETCH_ORI_*
, sendo o padrão igual aPDO::FETCH_ORI_NEXT
. Para requisitar um cursor navegável para o objeto PDOStatement, o atributoPDO::ATTR_CURSOR
precisa ser definido paraPDO::CURSOR_SCROLL
ao preparar a instrução SQL com PDO::prepare(). cursorOffset
-
Para um objeto PDOStatement representando um cursor navegável para o qual o parâmetro
cursorOrientation
esteja definido paraPDO::FETCH_ORI_ABS
, este valor especifica o número absoluto da linha no conjunto de resultados que deve ser buscada.Para um objeto PDOStatement representando um cursor navegável para o qual o parâmetro
cursorOrientation
esteja definido paraPDO::FETCH_ORI_REL
, este valor especifica a linha a ser buscada relativa à posição do cursor antes do método PDOStatement::fetch() ser chamado.
Valor Retornado
O valor de retorno desta função em caso de sucesso depende do tipo de busca. Em
todos os casos, false
é retornado em caso de falha ou se não houver mais linhas.
Erros/Exceções
Emite um erro de nível E_WARNING
se o atributo PDO::ATTR_ERRMODE
estiver definido
como PDO::ERRMODE_WARNING
.
Lança uma exceção PDOException se o atributo PDO::ATTR_ERRMODE
estiver definido como PDO::ERRMODE_EXCEPTION
.
Exemplos
Example #1 Buscando linhas usando estilos de busca diferentes
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Exercita estilos de PDOStatement::fetch */
print "PDO::FETCH_ASSOC: ";
print "Retorna a próxima linha como um array indexado por nome de coluna\n";
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
print "\n";
print "PDO::FETCH_BOTH: ";
print "Retorna a próxima linha como um array indexado por nome de coluna e número\n";
$result = $sth->fetch(PDO::FETCH_BOTH);
print_r($result);
print "\n";
print "PDO::FETCH_LAZY: ";
print "Retorna a próxima linha como um objeto PDORow com nomes de colunas como propriedades\n";
$result = $sth->fetch(PDO::FETCH_LAZY);
print_r($result);
print "\n";
print "PDO::FETCH_OBJ: ";
print "Retorna a próxima linha como um objeto anônimo com nomes de coluna como propriedades\n";
$result = $sth->fetch(PDO::FETCH_OBJ);
print $result->name;
print "\n";
?>
O exemplo acima produzirá:
PDO::FETCH_ASSOC: Retorna a próxima linha como um array indexado por nome de coluna Array ( [name] => apple [colour] => red ) PDO::FETCH_BOTH: Retorna a próxima linha como um array indexado por nome de coluna e número Array ( [name] => banana [0] => banana [colour] => yellow [1] => yellow ) PDO::FETCH_LAZY: Retorna a próxima linha como um objeto PDORow com nomes de colunas como propriedades PDORow Object ( [name] => orange [colour] => orange ) PDO::FETCH_OBJ: Retorna a próxima linha como um objeto anônimo com nomes de coluna como propriedades kiwi
Example #2 Buscando linhas com um cursor navegável
<?php
function readDataForwards($dbh) {
$sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY BET';
$stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
$data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
print $data;
}
}
function readDataBackwards($dbh) {
$sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY bet';
$stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
do {
$data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
print $data;
} while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR));
}
print "Lendo para a frente:\n";
readDataForwards($conn);
print "Lendo para trás:\n";
readDataBackwards($conn);
?>
O exemplo acima produzirá:
Reading forwards: 21 10 5 16 0 5 19 20 10 Reading backwards: 19 20 10 16 0 5 21 10 5
Example #3 Ordem de construção
Quando objetos são buscados através de PDO::FETCH_CLASS
, as propriedades
do objeto são atribuídas primeiro, e depois o construtor da classe é
invocado. Se PDO::FETCH_PROPS_LATE
também for informado, esta ordem
é revertida, isto, é, primeiro o construtor é chamado, e depois as
propriedades são atribuídas.
<?php
class Person
{
private $name;
public function __construct()
{
$this->tell();
}
public function tell()
{
if (isset($this->name)) {
echo "Eu sou {$this->name}.\n";
} else {
echo "Eu não tenho um nome ainda.\n";
}
}
}
$sth = $dbh->query("SELECT * FROM people");
$sth->setFetchMode(PDO::FETCH_CLASS, 'Person');
$person = $sth->fetch();
$person->tell();
$sth->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Person');
$person = $sth->fetch();
$person->tell();
?>
O exemplo acima produzirá algo semelhante a:
Eu sou Alice. Eu sou Alice. Eu não tenho um nome ainda. Eu sou Bob.
Veja Também
- PDO::prepare() - Prepara uma instrução para execução e retorna um objeto de instrução
- PDOStatement::execute() - Executa ums instrução preparada
- PDOStatement::fetchAll() - Busca as linhas remanescentes de um conjunto de resultados
- PDOStatement::fetchColumn() - Retorna uma única coluna do próximo registro de um resultado
- PDOStatement::fetchObject() - Busca o próximo registro e retorna-o como um objeto
- PDOStatement::setFetchMode() - Define o modo de carga de dados para esta instrução