<< Click to Display Table of Contents >> Select desmistificado (fetch) |
![]() ![]() ![]() |
Estrutura
classes\autoload.php // usado em exemplos anteriores
classes\base\Conexao.php // usado em exemplos anteriores
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
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;
}
}
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_CLASS, Cliente::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>";
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)