Comment récupérer correctement les types de données entiers et numériques à partir de MySQL à l'aide de PHP
Lors de l'interrogation d'une base de données MySQL à l'aide de PHP, il est crucial de s'assurer que Les types de données entiers et numériques sont renvoyés tels quels, plutôt que sous forme de chaînes. Ceci est essentiel pour l'intégrité des données et la compatibilité avec d'autres services.
Malheureusement, par défaut, le pilote natif PHP-MySQL convertit tous les résultats de requête en chaînes. Cette question a fait l'objet de nombreux débats, certains affirmant qu'il s'agit d'une limitation de mise en œuvre et d'autres affirmant que c'est incorrect. Cependant, le facteur clé à prendre en compte est le pilote utilisé.
La solution : utiliser le pilote MySQLnd
Pour résoudre ce problème, il est nécessaire de passer du pilote natif Pilote MySQL vers le pilote mysqlnd. Le pilote mysqlnd prend en charge le renvoi correct des types entiers et numériques.
Comment installer et rechercher mysqlnd
Sur Ubuntu, vous pouvez installer le pilote mysqlnd à l'aide des commandes suivantes :
sudo apt-get remove php5-mysql sudo apt-get install php5-mysqlnd sudo service apache2 restart
Pour vérifier que mysqlnd est utilisé, vérifiez la sortie de php -i. La section pdo_mysql devrait maintenant inclure une référence à mysqlnd.
Paramètres PDO
De plus, assurez-vous que les paramètres PDO suivants sont correctement configurés :
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
Valeurs renvoyées
Une fois le pilote mysqlnd lancé en cours d'utilisation et que les paramètres PDO appropriés sont appliqués, les résultats de la requête seront renvoyés selon les règles suivantes :
Exemple
L'exemple suivant illustre le comportement correct de la récupération de données entières et numériques :
$pdo = new PDO(...); $stmt = $pdo->prepare('SELECT * FROM table'); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_OBJ); var_dump($result);
Cela afficherait un objet avec les propriétés suivantes :
object(stdClass)[915] public 'integer_col' => int 1 public 'double_col' => float 1.55 public 'float_col' => float 1.5 public 'decimal_col' => string '1.20' (length=4) public 'bigint_col' => string '18446744073709551615' (length=20)
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!