Pascal's answer правильно.У меня были проблемы с тем, что все это работало. Вот что вам нужно сделать.
Во-первых, убедитесь, что у вас установлен и активирован mysqlnd. Посмотрите на php --info
. В разделе Pdo_Mysql, он должен выглядеть следующим образом:
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 321
Если вместо того, чтобы видеть mysqlnd
в версии Client API, вы увидите строку, как ...
Client API version => 5.5.29
... тогда вы не» У меня есть mysqlnd. Позаботьтесь об этом в первую очередь.
Во-вторых, PDO использует эмулированные подготовленные заявления by default for all MySQL соединений. Смешно, но вот оно. И вы получите собственные типы данных только в том случае, если вы используете реальные подготовленные операторы (называемые «подготовленные на стороне сервера заявления» в связанном сообщении блога, который теперь here). Таким образом, вы должны установить PDO :: ATTR_EMULATE_PREPARES ложь, например, так:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Наконец, убедитесь, что вы не установили PDO :: ATTR_STRINGIFY_FETCHES к истине.
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
В Ubuntu попробовать 'Sudo APT-получить установку php5-mysqlnd ' – Alex
Мне тоже нужно было сделать то, что @Alex сказал здесь, чтобы использовать php mysqlnd под капотом. +1 за его комментарий. – Zugwalt
Ускоренный переход к 2016 году, чтобы иметь правильные типы данных, возвращаемые из MySQL, для PHP 7 на CentOS/RHEL: 'yum install php70w-mysqlnd' –