Решението е да се уверите, че използвате mysqlnd драйвер за php.
Как да разберете, че не използвате mysqlnd?
Когато преглеждате php -i
, няма да има не споменаване на "mysqlnd". pdo_mysql
раздел ще има нещо подобно:
pdo_mysql
PDO Driver for MySQL => enabled Client API version => 5.1.72
Как го инсталирате?
Повечето ръководства за инсталиране на L/A/M/P предлагат apt-get install php5-mysql
но естественият драйвер за MySQL е инсталиран от различен пакет:php5-mysqlnd
. Открих, че това е налично с ppa:ondrej/php5-oldstable .
За да превключите към новия драйвер (в Ubuntu):
- Премахнете стария драйвер:
apt-get remove php5-mysql
- Инсталирайте новия драйвер:
apt-get install php5-mysqlnd
- Рестартиране на apache2:
service apache2 restart
Как да проверя дали драйверът се използва?
Сега php -i
ще споменава "mysqlnd" изрично в pdo_mysql
раздел:
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Настройки на PDO
Уверете се, че PDO::ATTR_EMULATE_PREPARES
е false
(проверете настройките си по подразбиране или ги задайте):$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Уверете се, че PDO::ATTR_STRINGIFY_FETCHES
е false
(проверете настройките си по подразбиране или ги задайте):$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
Върнати стойности
- Типове с плаваща запетая (FLOAT, DOUBLE) се връщат като PHP числа с плаваща запетая.
- Типове цели числа (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) се връщат като PHP цели числа.
- Типове с фиксирани точки (DECIMAL, NUMERIC) се връщат като низове.
† BIGINT със стойност, по-голяма от 64-битов подписан int (9223372036854775807) ще се върне като низ (или 32 бита на 32-битова система)
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)