Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Achei um excelente artigo aqui no Imasters falando sobre valores monetários. Aliás, foi o mais prático e claro que encontrei na internet. Como inserir no banco e como resgata-lo, já que existe uma dificuldade por conta do Mysql aceitar apenas valores com pontos e não com virgulas, como é de uso aqui no Brasil, quando se tratam de valores monetários.
Fiz um teste e inseri o valor usando a função sem ter nenhum problema. Quando dei o select, ele não ta retornando e acredito que seja pq estou usando obj.
Aqui vai o Artigo
Aqui o meu código
$stm = $pdo->prepare(" SELECT inventario.cod, inventario.preco1 ")
Assim retorno o valor da forma literal, como está no banco...
$this->preco1=$row['preco1'];
Como eu faço para resgatar o valor com o number_format?
Tentei assim, o q na minha cabeça seria o obvio rsrs
$this->preco1= ' R$ ' . number_format($l['preco1'], 2, ',', '.');
Valeu!!
Então, é pq eu nao coloquei o select todo. To fazendo um INNER JOIN nele
$stm = $pdo->prepare(" SELECT inventario.cod, inventario.preco1
cliente.nome_cliente,
cliente.cod_cliente,
FROM inventario
INNER JOIN cliente ON inventario.cod_cliente = cliente.cod_cliente
where inventario.cod = '$cod'");
Eu colocaria?
->fetchAll(PDO::FETCH_OBJ);
Pelo que eu entendi, se fosse um array eu usaria dessa forma:
$row =$stm->fetch(PDO::FETCH_OBJ);
A forma adequada pra eu usar no meu script seria essa?
$row =$stm->fetch(PDO::FETCH_LAZY);
//e logo
$this->preco1 = ' R$ ' . number_format($stm->preco1, 2, ',', '.');
pq ele possibilita criar um nome ou formato a variável acessada?!
é isso mesmo?
Saquei, Vinicius. Valeu pela ajuda...
a var stm é a instancia do seu objeto PDO e ele vai trazer os valores como propriedades.
a diferença é que um FETCH_OBJ serve para trazer mais de 1 dados, caso você queria todos os usuários cadastrados na sua DB essa é uma boa escolha, ele vai criar vários objetos e então você da um foreach e passa a controlar cada 1.
o FETCH_LAZY retorna epenas dados únicos veja que no seu exemplo eu fiz WHERE na condição no caso seria algo mais especifico.
ainda é possível fazer da seguinte maneira
$stm = $pdo->query(" SELECT inventario.preco1 FROM tabela WHERE id = 'x' ")->fetch(PDO::FETCH_LAZY)->preco1;
acho que seja pelo motivo que você citou, agora você tem objetos e não arrays.
a diferença?
bom o array tem o índices para ser acessado e o objeto tem propriedades e métodos.
creio eu que uma boa maneira de fazer a consulta é
$stm = $pdo->query(" SELECT inventario.cod, inventario.preco1 FROM tabela")->fetchAll(PDO::FETCH_OBJ);
ou
dependendo da sua necessidade é claro.
então o acesso seria
$this->preco1 = ' R$ ' . number_format($stm->preco1, 2, ',', '.');
lembrando que a propriedade preco1 deve existir no escopo da sua classe.