Maison > Article > développement back-end > Pourquoi les colonnes numériques MySQL sont-elles renvoyées sous forme de chaînes en PHP et comment puis-je m'assurer qu'elles sont renvoyées sous forme d'entiers ou de nombres flottants ?
Certaines applications basées sur PHP peuvent rencontrer un problème où les résultats des requêtes MySQL sont renvoyés sous forme de chaînes plutôt que sous forme de types de données entiers ou numériques corrects. Cela se produit malgré la définition de l'attribut PDO PDO::ATTR_STRINGIFY_FETCHES sur false pour empêcher la conversion de chaînes.
Il est crucial de noter que le pilote MySQL joue un rôle important pour déterminer si les types numériques sont renvoyé sous forme d'entiers ou de chiffres. Certains pilotes, tels que le pilote natif MySQL sous Linux, ne prennent pas entièrement en charge cette fonctionnalité.
Cependant, le pilote mysqlnd, qui est disponible pour les distributions Linux via des référentiels tiers, ne le fait pas. prendre en charge cette capacité. S'assurer que le pilote mysqlnd est utilisé dans votre environnement PHP est essentiel.
Pour passer du pilote MySQL natif à mysqlnd sur Ubuntu, suivez ces étapes :
Après avoir installé mysqlnd, confirmez qu'il est utilisé en exécutant php -je. Recherchez l'entrée suivante dans la section pdo_mysql :
PDO Driver for MySQL => enabled Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Assurez-vous que les attributs PDO suivants sont correctement définis :
Une fois ces paramètres configurés, MySQL renverra les types numériques comme suit :
Par exemple, le code PHP suivant affichera les types de données attendus :
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $stmt = $pdo->prepare("SELECT * FROM table"); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_OBJ); echo "<pre class="brush:php;toolbar:false">"; print_r($row); echo "";
Sortie :
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!