Maison > base de données > tutoriel mysql > Pourquoi mes valeurs numériques MySQL sont-elles renvoyées sous forme de chaînes en PHP et comment puis-je y remédier ?

Pourquoi mes valeurs numériques MySQL sont-elles renvoyées sous forme de chaînes en PHP et comment puis-je y remédier ?

Barbara Streisand
Libérer: 2024-12-05 07:29:11
original
657 Les gens l'ont consulté

Why Are My MySQL Numeric Values Returned as Strings in PHP, and How Can I Fix It?

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
Copier après la connexion

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);
Copier après la connexion

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 :

  • Types à virgule flottante (FLOAT, DOUBLE) comme les flottants PHP
  • Types entiers (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT) sous forme d'entiers PHP
  • Types à virgule fixe (DECIMAL, NUMERIC) sous forme de chaînes (remarque : les BIGINT dépassant 64 bits seront également renvoyés sous forme de chaînes)

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal