Tipo de Dados PHP e MYSQL

09/10/2013

Pessoal, boa tarde a todos.

Estou com uma dúvida, ela é mais teórica do que prática, mas, quem souber, por favor, explique-me isso.

Bem, desenvolvi o seguinte código:

$ALTURA = $mysql->getRow("SELECT id_altura FROM alturas WHERE altura = '$altura' AND unidade = '$unidade_altura'");

#se não encontrou, cadastra o valor e pega o último id
if(count($ALTURA) == 0){


$mysql->query("INSERT INTO alturas(altura,unidade) VALUES('$altura','$unidade_altura')");
$id_altura = $mysql->getResult("SELECT id_altura FROM alturas ORDER BY id_altura DESC");

}else{
$id_altura = $ALTURA['id_altura'];
}

Então, como viram acima, esse código é para verificar se um dado valor já existe na tabela ALTURAS. Se existir, ele apenas pega o ID do valor, se não, cadastra e pega o último id cadastrado. Estava ocorrendo o problema, que mesmo já tendo o valor cadastrado no banco de dados ele continuava cadastrando o valor, havendo repetição de valores, o que é uma coisa que eu estou tentando evitar o máximo possível.

Por exemplo, no banco já existia o valor 20.1. Eu colocava para cadastrá-lo, esse mesmo valor, e ele o repetia na tabela, gerando dois id's para esse valor.

Estou usando o MySQL

Para esse caso, como os valores podem ser flutuantes, eu configurei no MySQL para que ele fosse do tipo FLOAT. E estava dando esse erro. Alterei para o tipo VARCHAR, apenas para testar mesmo, e funcionou sem problemas. Ou seja, ele passou a reconhecer que o valor já estava cadastrado no sistema e apenas pega o id dele.

Alguém saberia me explicar o motivo disso?


Um abraço a todos!!!

PHP

Abraão Almeida

Respostas

09/10/2013

William (devwilliam)

Colega, tive um problema parecido, na minha aplicação a separação decimal para valores monetários era com "," e no MySQL é com ".", então no meu caso o PHP gerava exemplo 21,0 e o banco constava 21.0.

Para efeitos de consulta isso pode acabar interferindo.

Fiz um replace nesse valor trocando "," para ".", veja se aplica ao seu caso!
Responder Citar

09/10/2013

Abraão Almeida

Neste código, é que eu esqueci de informar inicialmente, eu já está utilizando um replace para alterar da ',' para o '.'.

Por isso, que continuo achando isso muito estranho!
Responder Citar