Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment renvoyer des colonnes entières et numériques de MySQL sous forme d'entiers et de numériques en PHP ?

La solution est de s'assurer que vous utilisez le mysqlnd pilote pour php.

Comment savez-vous que vous n'utilisez pas mysqlnd ?

Lors de la visualisation de php -i , il n'y aura non mention de "mysqlnd". Le pdo_mysql section aura quelque chose comme ça :

pdo_mysql

PDO Driver for MySQL => enabled Client API version => 5.1.72

Comment l'installer ?

La plupart des guides d'installation pour L/A/M/P suggèrent apt-get install php5-mysql mais le pilote natif pour MySQL est installé par un package différent :php5-mysqlnd . J'ai trouvé que cela était disponible avec le ppa:ondrej/php5-oldstable .

Pour passer au nouveau pilote (sur Ubuntu) :

  • Supprimez l'ancien pilote :
    apt-get remove php5-mysql
  • Installez le nouveau pilote :
    apt-get install php5-mysqlnd
  • Redémarrer apache2 :
    service apache2 restart

Comment puis-je vérifier que le pilote est utilisé ?

Maintenant php -i mentionnera "mysqlnd" explicitement dans le pdo_mysql rubrique :

pdo_mysql

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id:      e707c415db32080b3752b232487a435ee0372157 $

Paramètres APD

Assurez-vous que PDO::ATTR_EMULATE_PREPARES est false (vérifiez vos valeurs par défaut ou définissez-les) :
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Assurez-vous que PDO::ATTR_STRINGIFY_FETCHES est false (vérifiez vos valeurs par défaut ou définissez-les) :
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

Valeurs renvoyées

  • Les types à virgule flottante (FLOAT, DOUBLE) sont renvoyés sous forme de flottants PHP.
  • Les types entiers (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) sont renvoyés sous forme d'entiers PHP.
  • Les types à virgule fixe (DECIMAL, NUMERIC) sont renvoyés sous forme de chaînes.

† Les BIGINT avec une valeur supérieure à un entier signé 64 bits (9223372036854775807) seront renvoyés sous forme de chaîne (ou 32 bits sur un système 32 bits)

    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)