Я бачив, як це запитання повторювалося кілька разів у Stack Overflow, але жодне недостатньо досліджувало проблему (або, принаймні, корисним для мене способом)
Проблема полягає в тому, що запит БД повинен повертати цілі типи даних у 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
- Версія сервера: 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,
Будемо вдячні за будь-яку допомогу та досвід :) Я точно надішлю сюди, якщо знайду відповідь.