Lösningen är att se till att du använder mysqlnd drivrutin för php.
Hur vet du att du inte använder mysqlnd?
När du tittar på php -i
, kommer det att finnas nej omnämnande av "mysqlnd". pdo_mysql
avsnitt kommer att ha något sånt här:
pdo_mysql
PDO Driver for MySQL => enabled Client API version => 5.1.72
Hur installerar du det?
De flesta installationsguider för L/A/M/P föreslår apt-get install php5-mysql
men den inbyggda drivrutinen för MySQL är installerad av ett annat paket:php5-mysqlnd
. Jag upptäckte att detta var tillgängligt med ppa:ondrej/php5-oldstable .
För att byta till den nya drivrutinen (på Ubuntu):
- Ta bort den gamla drivrutinen:
apt-get remove php5-mysql
- Installera den nya drivrutinen:
apt-get install php5-mysqlnd
- Starta om apache2:
service apache2 restart
Hur kontrollerar jag att drivrutinen används?
Nu php -i
kommer att nämna "mysqlnd" uttryckligen i pdo_mysql
avsnitt:
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
PDO-inställningar
Se till att PDO::ATTR_EMULATE_PREPARES
är false
(kontrollera dina standardinställningar eller ställ in det):$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Se till att PDO::ATTR_STRINGIFY_FETCHES
är false
(kontrollera dina standardinställningar eller ställ in det):$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
Returnerade värden
- Flytande kommatyper (FLOAT, DOUBLE) returneras som PHP-flytande.
- Heltalstyper (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) returneras som PHP-heltal.
- Fastpunktstyper (DECIMAL, NUMERISK) returneras som strängar.
† BIGINTs med ett värde större än en 64-bitars signerad int (9223372036854775807) kommer att returneras som en sträng (eller 32 bitar på ett 32-bitarssystem)
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)