Я видел, как этот вопрос повторялся несколько раз при переполнении стека, но ни один из них не исследовал проблему (или, по крайней мере, так, как это полезно для меня).
Проблема заключается в том, что запрос БД должен возвращать целочисленные типы данных в PHP для целых столбцов. Вместо этого запрос возвращает каждый столбец как строковый тип.
Я обеспечил, что "PDO:: ATTR_STRINGIFY_FETCHES", если false, просто для того, чтобы убедиться, что результаты не передаются в строку.
Ответы, которые я видел:
- Это невозможно.
- Нет, он работает на Mac OS X, установленном PHP/MySQL
- Введите все ваши значения в свой код.
- Нет, я не буду этого делать
- Не беспокойтесь об этом, PHP свободно напечатан
- Мои данные выводятся как JSON и потребляются многими другими службами, некоторые требуют данных в правильном формате
Из моего исследования я понимаю, что это проблема с реализацией драйверов.
Многие источники утверждают, что родной драйвер MySQL не поддерживает возвращающие числовые типы. Это не похоже на то, поскольку он работает на Mac OS X. Если они не хотят сказать, что "родной драйвер MySQL на Linux не поддерживает эту функцию".
Это означает, что есть что-то особенное в драйвере/среде, которую я установил в Mac OS X. Я пытался определить различия, чтобы применить исправление, но я ограничен моим знанием того, как проверить эти вещи.
Различия:
- PHP на OS X был скомпилирован и установлен через Home Brew
- PHP на Ubuntu был установлен через "apt-get install php5-dev"
- PHP на OS X подключается к серверу MySQL, также работающему на OS X
- Версия сервера: 5.1.71-log Распределение источников
- PHP на Ubuntu подключается к базе данных Rackspace Cloud
- Версия сервера: 5.1.66-0 + squeeze1 (Debian)
среда Ubuntu
- Версия: 10.04.1
- PHP 5.4.21-1 + debphp.org ~ lucid + 1 (cli) (построено: 21 октября 2013 08:14:37)
-
php -i
PDO_MySQL
Драйвер PDO для MySQL = > включен Версия API клиента = > 5.1.72
среда Mac OS X
- 10.7.5
- PHP 5.4.16 (cli) (построено: 22 августа 2013 г. 09:05:58)
-
php -i
PDO_MySQL
Драйвер PDO для MySQL = > включен Версия API клиента = > mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Используемые флаги PDO
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,
Любая помощь и опыт будут оценены:) Я обязательно отправлюсь туда, если найду ответ.