Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite pessoal
Tenho uma dúvida:
Estou inserindo valores no banco usando o PDO, na minha tabela tenho o campo que recebe o valor setado como:
Total decimal(15,2)
Porém na consulta PDO, na hora de fazer o bindValue trato o valor dessa forma:
$query->bindParam(':total', $this->valor_total, PDO::PARAM_INT);
Como podem ver estou tentando inserir um valor inteiro em um campo preparado para receber decimal, não gera erro, mas fica completamente errado.
O que seria melhor, visto que não há como com o PDO tratar o valor como decimal? Devo setar o campo do banco como inteiro também? e remover virgulas e pontos que o usuário digitar?
Se fizer isso na hora de recuperar os valores do banco eu teria exatidão? e poderia formata-los com a função number_format()??
Grato pela ajuda de todos
Abraço
Bruno, me desculpe a pergunta, mas não teria nenhum problema por isso?
Quero dizer, quando eu recuperar os dados poderei tratar eles como valores normalmente, e usar o number_format para exibir?
Vi a um tempo atrás um tópico do Fabyo aqui do imasters falando sobre a importância de se usar os tipos de dado corretamente.
Agradeço a dica, vou testar aqui, obrigado
Bruno, me desculpe a pergunta, mas não teria nenhum problema por isso?
não, nenhum problema.
Quero dizer, quando eu recuperar os dados poderei tratar eles como valores normalmente, e usar o number_format para exibir?
sim, normalmente
>
Vi a um tempo atrás um tópico do Fabyo aqui do imasters falando sobre a importância de se usar os tipos de dado corretamente.
eu não disse pra você usar o tipo incorreto.
mas é 'assim' que se deve fazer com PDO.
Ok Bruno, entendi!
Mais uma vez, meu obrigado!
Por favor, pode marcar o tópico como resolvido
Abraço
Opa, sei que pedi para mudar o campo como resolvido, mas tive um problema:
Ao usar do modo como o amigo William Bruno me instruiu, ele arredondou os valores.
Existe alguma solução?
Outra alternativa, seria usar PDO::prepare() e PDOStatement::execute() direto, sem usar bindParam().
Bastaria você enviar um array de substituições para PDOStatement::execute() na ordem em que deveriam ser substituídos.
E A PDO se encarregaria do tratamento de tipo.
>
Outra alternativa, seria usar PDO::prepare() e PDOStatement::execute() direto, sem usar bindParam().
Bastaria você enviar um array de substituições para PDOStatement::execute() na ordem em que deveriam ser substituídos.
E A PDO se encarregaria do tratamento de tipo.
Tipo:
INSERT INTO tabela(coluna1,coluna2) VALUES(?,?)
Daee eu uso o prepare e depois o execute, isso já trata o sql injection por exemplo?
E mais uma duvida, usando esse metodo e tentando por o LIMIT, como por exemplo:
INSERT INTO tabela(coluna1,coluna2) VALUES(?,?) LIMIT ?,?
Dá erro ao tenta por esse limite...
Neste exato momento não tenho como lhe confirmar com 100% de precisão, mas quando mexi com renderização de SQL, cheguei a conclusão de que a cláusula LIMIT não pode usufruir desse esquema.
Parece que ao enviar para o execute(), as interrogações que referentes ao LIMIT tem seus valores envoltos pelas aspas (simples ou duplas) ou backtick (`), invalidando a query.
Ai você envia como string:
PDO::PARAM_STR