Select desmistificado (fetch)

<< Click to Display Table of Contents >>

Navigation:  PDO >

Select desmistificado (fetch)

Previous pageReturn to chapter overviewNext page

Estrutura

 

classes\autoload.php // usado em exemplos anteriores

classes\base\Conexao.php  // usado em exemplos anteriores

 

Tabela tb_cliente na base aula (mysql)

 

CREATE TABLE `tb_cliente` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`nome` VARCHAR(50) NOT NULL DEFAULT '',

`nasc` DATE NOT NULL,

`limite` DECIMAL(10,2) NOT NULL DEFAULT '0.00',

PRIMARY KEY (`id`)

)

COLLATE='utf8_general_ci'

ENGINE=InnoDB

AUTO_INCREMENT=10

 

2   "Cris"    1985-02-11   500,00
3   "Scarlet" 2019-01-01     1,99
4   "Jonas"   2018-02-02     0,99
5   "Marta"   2017-07-07     2,99
6   "Davi"    2011-11-01     1,91
7   "Marta2"  2017-07-07     2,99
8   "Davi3"   2011-11-01    11,91
9   "Davi4"   2011-11-01     1,91

 

classes\model\Cliente.php

 

namespace classes\model;
 
class Cliente {
    private $id;
    private $nome;
    private $nasc;
    private $limite;
    
    public function getId() {
        return $this->id;
    }
 
    public function getNome() {
        return $this->nome;
    }
 
    public function getNasc() {
        return $this->nasc;
    }
 
    public function getLimite() {
        return $this->limite;
    }
 
    public function setId($id) {
        $this->id = $id;
    }
 
    public function setNome($nome) {
        $this->nome = $nome;
    }
 
    public function setNasc($nasc) {
        $this->nasc = $nasc;
    }
 
    public function setLimite($limite) {
        $this->limite = $limite;
    }
}

 

Principal.php

 

require __DIR__ . '/classes/autoload.php';
 
// nosso select 
use classes\base\Conexao;
 
$conexao = Conexao::getConexao();
$sql = "select * from tb_cliente order by nome";
 
// FETCH - retorna linha a linha (a cada chamada)
echo "<hr><h1>FETCH simples - le um registro por vez</h1>";
$qy = $conexao->query($sql);
// fetch le uma linha e libera anterior
// true/1 qdo retorna, false/0 nao tem mais registro
while ($linha = $qy->fetch()) {
    var_dump($linha->nome);
}
 
// FETCH ALL - retorna um array com todos resultados em formato de objeto
echo "<hr><h1>FETCH_ALL - lista de objetos</h1>";
$qy = $conexao->query($sql);
$matriz = $qy->fetchAll();  // retorna uma lista de objetos - mais recomendado por ser objeto
// for para acessar cada objeto
foreach ($matriz as $linha) {
    $linha->nome;
}
// outra forma de acessar o primeiro objeto
$linha = $matriz[0];
echo "<h2> linha->nome = " . $linha->nome . "</h2>";
 
// FETCH NUM - acessando pelo idx
echo "<hr><h1>FETCH_NUM - usando indice numerico</h1>";
$qy = $conexao->query($sql);
$matriz = $qy->fetchAll(PDO::FETCH_NUM); // nao recomendado
// retornando primeira linha da matriz (campos acessados pelo indice numerico)
$linha = $matriz[0];
echo "<h2> linha[1] = " . $linha[1] . "</h2>";
 
// FETCH ASSOC - retorna array puro - mais rapido, mas não compensa usar
echo "<hr><h1>FETCH_ASSOC</h1>";
$qy = $conexao->query($sql);
$matriz = $qy->fetchAll(PDO::FETCH_ASSOC); // mais rapido de todos - retorna ARRAY
// pegando nome do cliente no indice 1
$linha = $matriz[1];
echo "<h2> linha['nome'] = " . $linha["nome"] . "</h2>";
 
// FETCH ASSOC - monta uma classe
use classes\model\Cliente;
 
echo "<hr><h1>FETCH_ASSOC class</h1>";
$qy = $conexao->query($sql);
$matriz = $qy->fetchAll(PDO::FETCH_CLASSCliente::class); // mais rapido de todos - retorna ARRAY
//var_dump($matriz);
// pegando nome do cliente no indice 1
/** @var \classes\model\Cliente $cliente */  // essa linha possibilida usar o autocompletar da IDE
$cliente = $matriz[1];
echo "<h2> cliente->getNome() = " . $cliente->getNome() . "</h2>";

 

Saida

 


FETCH simples - le um registro por vez

D:\xampp\htdocs\netbeans\aqui.php:17:string 'Cris' (length=4)
D:\xampp\htdocs\netbeans\aqui.php:17:string 'Davi' (length=4)
D:\xampp\htdocs\netbeans\aqui.php:17:string 'Davi3' (length=5)
D:\xampp\htdocs\netbeans\aqui.php:17:string 'Davi4' (length=5)
D:\xampp\htdocs\netbeans\aqui.php:17:string 'Jonas' (length=5)
D:\xampp\htdocs\netbeans\aqui.php:17:string 'Marta' (length=5)
D:\xampp\htdocs\netbeans\aqui.php:17:string 'Marta2' (length=6)
D:\xampp\htdocs\netbeans\aqui.php:17:string 'Scarlet' (length=7)


FETCH_ALL - lista de objetos

linha->nome = Cris


FETCH_NUM - usando indice numerico

linha[1] = Cris


FETCH_ASSOC

linha['nome'] = Davi


FETCH_ASSOC class

cliente->getNome() = Davi