Maison > base de données > tutoriel mysql > Pourquoi les résultats de mes colonnes numériques PHP MySQL sont-ils parfois des chaînes au lieu d'entiers ou de flottants ?

Pourquoi les résultats de mes colonnes numériques PHP MySQL sont-ils parfois des chaînes au lieu d'entiers ou de flottants ?

DDD
Libérer: 2024-12-10 16:18:10
original
905 Les gens l'ont consulté

Why are my PHP MySQL numeric column results sometimes strings instead of integers or floats?

Renvoi d'entiers et de chiffres en tant que types en PHP à partir de MySQL

Malgré la définition de PDO::ATTR_STRINGIFY_FETCHES sur false, vous pouvez rencontrer des problèmes lorsque les colonnes numériques sont toujours renvoyés sous forme de chaînes au lieu d’entiers ou de chiffres. Ce comportement est souvent attribué à un problème d'implémentation du pilote.

La différence mysqlnd

La clé pour résoudre ce problème réside dans la garantie que vous utilisez mysqlnd pilote pour PHP. Lors de la visualisation de php -i, l'absence de "mysqlnd" dans la section pdo_mysql indique que le pilote natif est utilisé à la place.

Installation de mysqlnd

Sur Ubuntu, installez php5-mysqlnd au lieu de php5-mysql. Pour garantir une transition réussie, suivez ces étapes :

  1. Supprimez l'ancien pilote : apt-get remove php5-mysql
  2. Installez le nouveau pilote : apt-get install php5-mysqlnd
  3. Redémarrer Apache : redémarrage du service Apache2

Vérification mysqlnd

Lors de l'installation de php5-mysqlnd, php -i devrait maintenant mentionner explicitement "mysqlnd" dans la section pdo_mysql.

Paramètres PDO

Définissez les attributs PDO suivants pour garantir des données appropriées gestion :

  • PDO::ATTR_EMULATE_PREPARES : false
  • PDO::ATTR_STRINGIFY_FETCHES : false

Valeurs renvoyées

Avec le pilote et les paramètres corrects, les colonnes numériques seront renvoyés selon les types PHP appropriés :

  • Types à virgule flottante (FLOAT, DOUBLE) : PHP flottants
  • Types entiers (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT) : PHP entiers
  • Types à virgule fixe (DECIMAL, NUMERIC) : strings
    (Remarque : les BIGINT dépassant un entier signé de 64 bits seront renvoyés sous forme de chaînes sur les systèmes 64 bits.)

Par exemple, les données suivantes :

+-----------+-----------+----------+-------------+--------------+
| integer_col | double_col | float_col | decimal_col | bigint_col    |
+-----------+-----------+----------+-------------+--------------+
| 1          | 1.55      | 1.5      | 1.20        | 18446744073709551615 |
+-----------+-----------+----------+-------------+--------------+
Copier après la connexion

Sera retourné comme :

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal