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
Susan Sarandonoriginal
2024-11-27 08:23:13499parcourir

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)

Sortie :

1
1.55
1.20
18446744073709551615

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!

Déclaration:
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