Løsningen er at sikre, at du bruger mysqlnd driver til php.
Hvordan ved du, at du ikke bruger mysqlnd?
Når du ser php -i
, vil der være ingen omtale af "mysqlnd". pdo_mysql
sektionen vil have noget som dette:
pdo_mysql
PDO Driver for MySQL => enabled Client API version => 5.1.72
Hvordan installerer du det?
De fleste installationsvejledninger til L/A/M/P foreslår apt-get install php5-mysql
men den oprindelige driver til MySQL er installeret af en anden pakke:php5-mysqlnd
. Jeg fandt ud af, at dette var tilgængeligt med ppa:ondrej/php5-oldstable .
Sådan skifter du til den nye driver (på Ubuntu):
- Fjern den gamle driver:
apt-get remove php5-mysql
- Installer den nye driver:
apt-get install php5-mysqlnd
- Genstart apache2:
service apache2 restart
Hvordan kontrollerer jeg, at driveren bliver brugt?
Nu php -i
vil nævne "mysqlnd" eksplicit i pdo_mysql
afsnit:
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
PDO-indstillinger
Sørg for at PDO::ATTR_EMULATE_PREPARES
er false
(tjek dine standardindstillinger eller indstil det):$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Sørg for at PDO::ATTR_STRINGIFY_FETCHES
er false
(tjek dine standardindstillinger eller indstil det):$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
Returnerede værdier
- Flydende kommatyper (FLOAT, DOUBLE) returneres som PHP-flydende.
- Heltalstyper (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) returneres som PHP-heltal.
- Fix-point-typer (DECIMAL, NUMERIC) returneres som strenge.
† BIGINTs med en værdi større end en 64 bit signeret int (9223372036854775807) vil returnere som en streng (eller 32 bit på et 32 bit system)
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)