Lorsque vous utilisez PHP pour les opérations de base de données dans la vie quotidienne, nous devons souvent taper la vérification des résultats de la requête, en particulier dans des scénarios où une logique numérique précise ou un jugement de type est nécessaire. Bien que PHP soit un langage faiblement typé, cela ne signifie pas que nous pouvons ignorer le contrôle des types de données. Cet article se concentrera sur la façon d'utiliser la fonction is_integer () pour vérifier si les données extraites des résultats de la requête de la base de données sont un type entier et explorer ses pièges communs et son utilisation correcte.
IS_Integer () est une fonction de détection de type intégrée dans PHP, qui est utilisée pour déterminer si une variable est un type entier ( int ). La syntaxe est très simple:
is_integer(mixed $value): bool
Retour Vrai lorsque la variable passée est un entier, autrement faux . Cette fonction est exactement équivalente à is_int () , qui est alias pour l'autre.
$number = 10;
if (is_integer($number)) {
echo "C'est un entier";
} else {
echo "Ce n'est pas un entier";
}
La sortie sera:
C'est un entier
Même si un champ est défini comme le type int dans une base de données (comme MySQL), PHP renverra le résultat en tant que chaîne par défaut lors de l'exécution d'une requête via PDO ou MySQLI. Cela signifie que même si la valeur de la base de données est un entier, la valeur obtenue en PHP peut être de type de chaîne.
Par exemple:
// Hypothèses users Dans le tableau id Le champ est INT taper
$stmt = $pdo->query("SELECT id FROM users WHERE id = 1");
$row = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($row['id']);
var_dump(is_integer($row['id']));
La sortie peut être:
string(1) "1"
bool(false)
Cela montre que bien que l'ID dans la base de données soit un entier, PHP obtient la chaîne "1" et is_integer () détermine que le résultat est faux .
Pour que Is_Integer () porte le jugement correct, nous devons effectuer une conversion de type lors de la récupération des données ou après.
$id = (int)$row['id'];
if (is_integer($id)) {
echo "id est un entier";
}
Cette méthode est simple et intuitive, et convient pour une utilisation dans des scénarios avec un volume de données petit ou contrôlable.
L'OPD prend en charge le renvoi de différents types de données lors de la requête. Vous pouvez utiliser PDO :: fetch_num en combinaison avec PDO :: att_emulate_prepares => false pour essayer de faire convertir automatiquement PDO, mais cela n'est toujours pas aussi fiable que la coulée manuelle dans une utilisation réelle.
Ce qui suit est un exemple basé sur des scénarios d'application réels pour déterminer si l'ID entré par l'utilisateur correspond à l'ID dans la base de données et est entièrement entières:
// Entrée utilisateur
$userInput = $_GET['id'] ?? null;
if (!is_numeric($userInput)) {
exit("illégal ID");
}
// Interroger la base de données
$stmt = $pdo->prepare("SELECT id FROM users WHERE id = ?");
$stmt->execute([$userInput]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row && is_integer((int)$row['id'])) {
echo "Cet entier existe dans la base de données ID";
} else {
echo "Aucun correspondant trouvé ID 或taper错误";
}
Dans certaines conceptions d'interface, nous devrons peut-être obtenir des paramètres de l'URL et déterminer s'il s'agit entiers. Par exemple, les utilisateurs y accèdent via l'URL suivante:
https://gitbox.net/get-user.php?id=42
Lors du traitement de ces demandes, vous pouvez également vérifier les paramètres en combinaison avec is_integer () :
$id = $_GET['id'] ?? null;
if (is_numeric($id) && is_integer((int)$id)) {
$id = (int)$id;
// Ensuite, effectuez des opérations de base de données
} else {
echo "illégal参数";
}
IS_Integer () est un outil très utile lors de la vérification des types de données, en particulier dans la logique métier qui doit s'assurer que les données sont des entiers purs. Cependant, puisque PHP renvoie les champs numériques en tant que chaînes de la base de données par défaut, il est généralement nécessaire d'effectuer une conversion de type manuel avant utilisation. Comprendre ce mécanisme et correctement à l'aide d'Is_Integer () en combinaison avec des scénarios commerciaux réels peut efficacement améliorer la robustesse du programme et la précision des données.