Résoudre l'écart dans le renvoi de valeurs entières et numériques de MySQL en PHP
Lors de la récupération de données de MySQL à l'aide de PHP, il peut être déroutant de rencontrer des incohérences de type où les colonnes entières et numériques sont renvoyées sous forme de chaînes au lieu des données prévues types.
Le problème du pilote
Il est crucial de déterminer le pilote sous-jacent utilisé pour la connectivité de la base de données. Le problème vient souvent de l'utilisation du pilote MySQL natif, qui n'a pas la capacité de renvoyer des types numériques sous forme d'entiers.
Identification du pilote MySQLnd
Pour vérifier si vous êtes à l'aide du pilote MySQL natif, inspectez la sortie de php -i. Si aucune mention de "mysqlnd" n'est présente dans la section pdo_mysql, vous utilisez probablement le pilote natif.
Passer au pilote MySQLnd
La solution réside dans passer au pilote mysqlnd, qui prend en charge le renvoi correct des types numériques. Sur Ubuntu, cela peut être réalisé par :
sudo apt-get remove php5-mysql sudo apt-get install php5-mysqlnd sudo service apache2 restart
Paramètres PDO
Une fois le pilote mysqlnd installé, assurez-vous que les paramètres PDO suivants sont correctement définis :
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
Valeurs renvoyées
Après avoir mis en œuvre les étapes ci-dessus, Les résultats de la requête MySQL renverront les types numériques comme prévu :
Un exemple des valeurs renvoyées serait :
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!