Maison > développement back-end > tutoriel php > Comment garantir que les types de données entiers et numériques sont correctement renvoyés par MySQL en PHP ?

Comment garantir que les types de données entiers et numériques sont correctement renvoyés par MySQL en PHP ?

Susan Sarandon
Libérer: 2024-11-27 08:23:13
original
498 Les gens l'ont consulté

How to Ensure Integer and Numeric Data Types Are Returned Correctly from MySQL in PHP?

Comment récupérer des types de données entiers et numériques sous forme d'entiers et de numériques en PHP à partir de MySQL

Lors d'une interrogation de MySQL à l'aide de PHP, il est courant de rencontrer un problème où les colonnes entières et numériques sont renvoyées sous forme de types de chaîne. Malgré la configuration de "PDO::ATTR_STRINGIFY_FETCHES" sur false, ce problème persiste.

Solutions

  1. Vérifiez le pilote mysqlnd :
    Assurez-vous d'utiliser le pilote mysqlnd au lieu du pilote MySQL natif. Dans la sortie "php -i" de PHP, recherchez la section pdo_mysql. L'absence de "mysqlnd" indique que le pilote natif est utilisé.
  2. Installez le pilote mysqlnd (Ubuntu) :
    Supprimez le pilote natif avec "apt-get remove php5- mysql" et installez le pilote mysqlnd avec "apt-get install php5-mysqlnd."
  3. Confirmer Utilisation de mysqlnd :
    Après avoir redémarré Apache, vérifiez si "mysqlnd" est mentionné dans la section pdo_mysql de la sortie "php -i" de PHP.
  4. Configurer PDO :
    Assurez-vous que les attributs PDO suivants sont set :

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

Types renvoyés

Lors de l'utilisation du Les valeurs du pilote mysqlnd, des colonnes entières et numériques sont renvoyées sous la forme des types de données PHP suivants :

  • Types à virgule flottante (FLOAT, DOUBLE) : floats
  • Types entiers (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT) : entiers
  • Types à virgule fixe (DECIMAL, NUMERIC) : chaînes (peut être un cas particulier)

Exemple

$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$stmt = $pdo->prepare('SELECT * FROM table');
$stmt->execute();

$result = $stmt->fetch(PDO::FETCH_OBJ);

echo $result->integer_col; // int
echo $result->double_col; // float
echo $result->decimal_col; // string
echo $result->bigint_col; // string (since value exceeds 64-bit signed int)
Copier après la connexion

Sortie :

1
1.55
1.20
18446744073709551615
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