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)