Я несколько раз повторял этот вопрос несколько раз о переполнении стека, но ни один из них не изучал проблему (или, по крайней мере, так, как это мне полезно)
Проблема в том, что запрос БД должен возвращать целочисленные типы данных в PHP для целых столбцов. Вместо этого запрос возвращает каждый столбец как строковый тип.
Я гарантировал, что «PDO :: ATTR_STRINGIFY_FETCHES», если false, просто для того, чтобы убедиться, что результаты не передаются в строку.
Ответы, которые я видел:
Из моих исследований я понимаю, что это проблема внедрения драйверов.
Многие источники утверждают, что родной драйвер MySQL не поддерживает возвращаемые числовые типы. Это не похоже на то, поскольку он работает на Mac OS X. Если они не хотят сказать, что «родной драйвер MySQL в Linux не поддерживает эту функцию».
Это означает, что есть что-то особенное в драйвере / среде, которую я установил в Mac OS X. Я пытался выявить различия, чтобы применить исправление, но я ограничен моим знанием того, как проверить эти вещи.
php -i
PDO_MySQL
Драйвер PDO для MySQL => включен Client API version => 5.1.72
php -i
PDO_MySQL
PDO Driver for MySQL => enabled Client API version => mysqlnd 5.0.10 – 20111026 – $ Id: e707c415db32080b3752b232487a435ee0372157 $
PDO::ATTR_CASE => PDO::CASE_NATURAL, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, PDO::ATTR_STRINGIFY_FETCHES => false, PDO::ATTR_EMULATE_PREPARES => false,
Любая помощь и опыт будут оценены 🙂 Я обязательно отправлюсь сюда, если найду ответ.
Решение состоит в том, чтобы убедиться, что вы используете драйвер mysqlnd для php.
При просмотре 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
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::ATTR_EMULATE_PREPARES
является false
(проверьте настройки по умолчанию или установите его):
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Убедитесь, что PDO::ATTR_STRINGIFY_FETCHES
является false
(проверьте настройки по умолчанию или установите его):
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
† 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)