Array
(
)

Tipo de Dados PHP e MYSQL

PHP
Abraão Almeida
   - 09 out 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!!!

William (devwilliam)
   - 09 out 2013

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!

Abraão Almeida
   - 09 out 2013

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!