Si les données proviennent d'un fichier CSV, vous devez vous rappeler que toutes les valeurs seront des chaînes (même les chaînes numériques ont toujours un type de chaîne).
Vous ne pouvez donc pas utiliser is_int()
/is_float()
/etc., car cela ne vous renseigne que sur le type ou la variable. Vous pouvez utiliser is_numeric()
pour vérifier la valeur, mais cela permettra des choses comme la notation exponentielle comme "+0123.45e6". Parfois ctype_digit()
peut être utile pour tester des entiers pour cette raison, car seuls les nombres 0 à 9 seront présents dans une chaîne pour qu'elle renvoie true.
Les expressions régulières peuvent également être utilisées pour identifier les types de données basés sur des modèles, mais vous devez surveiller la surcharge de performances lorsque vous traitez des ensembles de données volumineux. Il est presque toujours conseillé, du point de vue des performances, d'utiliser le preg_
famille de fonctions à la place de ereg
fonctions.
Si vous validez des éléments tels que les types ENUM ou SET, vous devrez probablement créer un tableau contenant des valeurs légales (ou les extraire avec une requête), puis vérifier la valeur par rapport à elles avec in_array()
.
Pour les champs CHAR/VARCHAR, vous pouvez analyser la définition de la colonne, puis vérifier si la longueur de la valeur respecte les contraintes.
Si le type NULL est autorisé sur l'une de vos colonnes, vous devrez également vérifier cela (et probablement mapper des valeurs vides ou la chaîne "NULL" à une valeur NULL réelle).
Si vous cherchez à échapper correctement à ces valeurs, envisagez d'utiliser des instructions préparées et l'extension PDO (PHP Data Objects). Cela permet à MySQL d'échapper correctement les données en fonction du type. (Vous pouvez également utiliser des instructions préparées avec MySQLi.)
Si vous recherchez des types de données spécifiques et comment les identifier, vous pouvez modifier votre question pour faciliter des réponses plus complètes.