Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso restituire colonne intere e numeriche da MySQL come numeri interi e numerici in PHP?

La soluzione è assicurarsi di utilizzare mysqlnd driver per php.

Come fai a sapere che non stai usando mysqlnd?

Durante la visualizzazione di php -i , non ci sarà nessuno menzione di "mysqlnd". Il pdo_mysql la sezione avrà qualcosa del genere:

pdo_mysql

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

Come lo installi?

La maggior parte delle guide di installazione per L/A/M/P suggeriscono apt-get install php5-mysql ma il driver nativo per MySQL è installato da un pacchetto diverso:php5-mysqlnd . Ho scoperto che questo era disponibile con ppa:ondrej/php5-oldstable .

Per passare al nuovo driver (su Ubuntu):

  • Rimuovi il vecchio driver:
    apt-get remove php5-mysql
  • Installa il nuovo driver:
    apt-get install php5-mysqlnd
  • Riavvia apache2:
    service apache2 restart

Come posso verificare che il driver sia in uso?

Ora php -i menzionerà esplicitamente "mysqlnd" nel pdo_mysql sezione:

pdo_mysql

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

Impostazioni DOP

Assicurati che PDO::ATTR_EMULATE_PREPARES è false (controlla le impostazioni predefinite o impostalo):
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Assicurati che PDO::ATTR_STRINGIFY_FETCHES è false (controlla le tue impostazioni predefinite o impostalo):
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

Valori restituiti

  • I tipi a virgola mobile (FLOAT, DOUBLE) vengono restituiti come float PHP.
  • I tipi interi (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) vengono restituiti come interi PHP.
  • I tipi a virgola fissa (DECIMAL, NUMERIC) vengono restituiti come stringhe.

† I BIGINT con un valore maggiore di 64 bit con segno int (9223372036854775807) verranno restituiti come stringa (o 32 bit su un sistema a 32 bit)

    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)