Salve a tutti.
Premessa.
Poche ore fa ho postato una discussione in cui parlavo di una anomalia, consistente nella "non segnalazione" di mysql a php dell'inserimento di una stringa in un campo float, mysql girava normalemtne ma nel campo compariva un valore null, ciò non permette di creare un controlo basato su un messaggio di errore, visto che tale messaggio non compare (mentre compare se immetto il record direttamente dal prompt mysql).
Problema.
Avevo quindi pensato di risolvere il problema facendo un controllo preventivo del dato, ma le funzioni che utilizzo tipo is_float, is_numeric, is_string, oppure quelle per le espressioni regolari tipo eregi, non funzionano o funzionano al contrario.
Es:
Codice PHP:
$queryA = "insert into tabella (campo_testo";
$queryB = ") values ('$testo' ";
if (($num != 0.00) and ($num != "")) {
if (is_float($num)){
$queryA .= ", campo_numerico";
$queryB .= ", $num";
} else {
$queryA .= "xxx";
}
}
$query = $queryA . $queryB . ");)";
Avrei potuto omettere campo_testo e $testo nella query di esempio, ma servono a far capire che la query è composta da altre variabili
Ovvero voglio fare in modo che se il campo numerico è diverso da un valore di default 0.00 e ciò che è immesso è un numero venga creata una query che consenta l'inserimento.
Se il dato non è numerico quindi chi ha immesso il dato ha sbagliato; setto la variabile $queryA a xxx che non significando niente genera un messaggio di errore.
Il problema è che se è un float mi da l'errore, se è una stringa la inserisce ma poi in tabella chiaramente come al solito risulta il valore NULL in quanto un dato stringa non può stare in un campo float.
In poche parole funziona al contrario, se nego la funzione is_float (!isfloat) il messaggio di errore non lo da mai, quindi il risultato non si ribalta come dovrebbe (anche se sarebbe comunque una anomalia).
Stessa cosa per tutte le altre funzioni che ho elencato.
Mi chiedo se qualcuno ha una seppur pallida idea di cosa possa generare un comportamento così anomalo.
Scusate per la prolissità ma non riuscivo ad esporre il problema in modo più sintetico.
Grazie per l'attenzione.