sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo devuelvo columnas enteras y numéricas de MySQL como números enteros y numéricos en PHP?

La solución es asegurarse de que está utilizando mysqlnd controlador para php.

¿Cómo sabes que no estás usando mysqlnd?

Al ver php -i , no habrá no mención de "mysqlnd". El pdo_mysql tendrá algo como esto:

pdo_mysql

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

¿Cómo se instala?

La mayoría de las guías de instalación para L/A/M/P sugieren apt-get install php5-mysql pero el controlador nativo para MySQL está instalado por un paquete diferente:php5-mysqlnd . Descubrí que esto estaba disponible con ppa:ondrej/php5-oldstable .

Para cambiar al nuevo controlador (en Ubuntu):

  • Elimine el controlador anterior:
    apt-get remove php5-mysql
  • Instalar el nuevo controlador:
    apt-get install php5-mysqlnd
  • Reiniciar apache2:
    service apache2 restart

¿Cómo compruebo que se está utilizando el controlador?

Ahora php -i mencionará "mysqlnd" explícitamente en el pdo_mysql sección:

pdo_mysql

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

Configuración de PDO

Asegúrese de que PDO::ATTR_EMULATE_PREPARES es false (verifique sus valores predeterminados o configúrelo):
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Asegúrese de que PDO::ATTR_STRINGIFY_FETCHES es false (verifique sus valores predeterminados o configúrelos):
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

Valores devueltos

  • Los tipos de punto flotante (FLOAT, DOUBLE) se devuelven como flotantes de PHP.
  • Los tipos enteros (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) se devuelven como enteros de PHP.
  • Los tipos de punto fijo (DECIMAL, NUMERIC) se devuelven como cadenas.

† Los BIGINT con un valor superior a un int con signo de 64 bits (9223372036854775807) se devolverán como una cadena (o 32 bits en un 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)