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)