Řešením je zajistit, že používáte mysqlnd ovladač pro php.
Jak víte, že nepoužíváte mysqlnd?
Při zobrazení php -i
, bude ne zmínka o "mysqlnd". pdo_mysql
sekce bude mít něco takového:
pdo_mysql
PDO Driver for MySQL => enabled Client API version => 5.1.72
Jak jej nainstalujete?
Většina instalačních příruček pro L/A/M/P doporučuje apt-get install php5-mysql
ale nativní ovladač pro MySQL je instalován pomocí jiného balíčku:php5-mysqlnd
. Zjistil jsem, že to bylo k dispozici s ppa:ondrej/php5-oldstable .
Přepnutí na nový ovladač (na Ubuntu):
- Odstraňte starý ovladač:
apt-get remove php5-mysql
- Nainstalujte nový ovladač:
apt-get install php5-mysqlnd
- Restartujte apache2:
service apache2 restart
Jak zkontroluji, že se ovladač používá?
Nyní php -i
zmíní "mysqlnd" výslovně v pdo_mysql
sekce:
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Nastavení PDO
Ujistěte se, že PDO::ATTR_EMULATE_PREPARES
je false
(zkontrolujte své výchozí hodnoty nebo je nastavte):$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Ujistěte se, že PDO::ATTR_STRINGIFY_FETCHES
je false
(zkontrolujte své výchozí hodnoty nebo je nastavte):$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
Vrácené hodnoty
- Typy s plovoucí desetinnou čárkou (FLOAT, DOUBLE) jsou vráceny jako plovoucí PHP.
- Typy celých čísel (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) jsou vráceny jako celá čísla PHP.
- Typy s pevnou čárkou (DECIMAL, NUMERIC) jsou vráceny jako řetězce.
† BIGINTy s hodnotou větší než 64bitový znak int (9223372036854775807) se vrátí jako řetězec (nebo 32 bitů na 32bitovém systému)
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)