Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como faço para retornar colunas inteiras e numéricas do MySQL como números inteiros e numéricos em PHP?


A solução é garantir que você esteja usando o mysqlnd driver para php.

Como você sabe que não está usando mysqlnd?


Ao visualizar php -i , não haverá não menção de "mysqlnd". O pdo_mysql seção terá algo assim:
pdo_mysql

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

Como você o instala?


A maioria dos guias de instalação para L/A/M/P sugere apt-get install php5-mysql mas o driver nativo para MySQL é instalado por um pacote diferente:php5-mysqlnd . Descobri que isso estava disponível com o ppa:ondrej/php5-oldstable .

Para mudar para o novo driver (no Ubuntu):
  • Remova o driver antigo:
    apt-get remove php5-mysql
  • Instale o novo driver:
    apt-get install php5-mysqlnd
  • Reiniciar o apache2:
    service apache2 restart

Como verifico se o driver está sendo usado?


Agora php -i irá mencionar "mysqlnd" explicitamente no pdo_mysql seção:
pdo_mysql

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

Configurações do PDO


Certifique-se de que PDO::ATTR_EMULATE_PREPARES é false (verifique seus padrões ou defina-os):
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Certifique-se de que PDO::ATTR_STRINGIFY_FETCHES é false (verifique seus padrões ou defina-os):
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

Valores retornados

  • Tipos de ponto flutuante (FLOAT, DOUBLE) são retornados como floats PHP.
  • Tipos inteiros (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) são retornados como inteiros PHP.
  • Tipos de ponto fixo (DECIMAL, NUMERIC) são retornados como strings.

† BIGINTs com um valor maior que um int assinado de 64 bits (9223372036854775807) retornarão como uma string (ou 32 bits em um sistema de 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)