Souvent, lorsque nous travaillons avec des bases de données, nous rencontrons le problème de récupérer des valeurs numériques sous forme de chaînes au lieu du type de données numérique attendu . Cela peut être courant lors de l'utilisation de PDO (PHP Data Objects) avec MySQL.
PDO propose un attribut appelé PDO::ATTR_STRINGIFY_FETCHES qui est conçu pour gérer cette conversion, mais il n'est pas applicable au pilote MySQL. Cela nous amène à nous demander pourquoi PDO renvoie des chaînes pour les valeurs numériques dans MySQL.
La réponse réside dans les paramètres d'émulation de PDO. Par défaut, PDO émule les instructions préparées pour assurer la compatibilité avec les anciens pilotes. Cependant, cette émulation peut entraîner le renvoi de valeurs numériques sous forme de chaînes.
Pour éviter cela, nous devons désactiver l'émulation en définissant PDO::ATTR_EMULATE_PREPARES sur false :
$pdo = new PDO($dsn, $user, $pass, [ PDO::ATTR_EMULATE_PREPARES => false ]);
Avec émulation désactivé, MySQL renverra les types de données natifs pour les instructions préparées, garantissant que les valeurs numériques sont récupérées sous forme de données numériques sans aucune chaîne conversion.
Il est important de noter qu'il est généralement recommandé d'utiliser des instructions préparées lorsque vous travaillez avec des bases de données afin d'éviter les vulnérabilités d'injection SQL et d'améliorer les performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!