He visto repetirse esta pregunta varias veces en Stack Overflow, pero ninguna explora suficientemente el problema (o al menos de una manera que me sea útil)
El problema es que una consulta de base de datos debería devolver tipos de datos enteros en PHP para columnas enteras. En cambio, la consulta devuelve cada columna como un tipo de cadena.
Me he asegurado de que "PDO :: ATTR_STRINGIFY_FETCHES" sea falso solo para asegurarme de que los resultados no se conviertan en cadenas.
Respuestas que he visto:
- No se puede hacer
- No, está funcionando en Mac OS X instalado PHP / MySQL
- Escriba emitir todos sus valores en su código
- No, no haré eso
- No se preocupe por eso, PHP está escrito de manera flexible
- Mis datos se envían como JSON y son consumidos por muchos otros servicios, algunos requieren los datos en el formato correcto
De mi investigación, entiendo que este es un problema de implementación de controladores.
Muchas fuentes afirman que el controlador nativo de MySQL no admite la devolución de tipos numéricos. Esto no parece cierto ya que funciona en Mac OS X. A menos que quieran decir que "el controlador nativo de MySQL en Linux no es compatible con la función".
Esto implica que hay algo especial en el controlador / entorno que he instalado en Mac OS X. He estado tratando de identificar las diferencias para aplicar una solución, pero estoy limitado por mi conocimiento de cómo verificar estas cosas.
Las diferencias:
- PHP en OS X se compiló e instaló a través de Home Brew
- PHP en Ubuntu se instaló a través de "apt-get install php5-dev"
- PHP en OS X se está conectando a un servidor MySQL que también se ejecuta en OS X
- Versión del servidor: distribución de origen 5.1.71-log
- PHP en Ubuntu se está conectando a una base de datos en la nube de Rackspace
- Versión del servidor: 5.1.66-0 + squeeze1 (Debian)
Entorno Ubuntu
- Versión: 10.04.1
- PHP 5.4.21-1 + debphp.org ~ lucid + 1 (cli) (construido: 21 de octubre de 2013 08:14:37)
php -i
pdo_mysql
Controlador PDO para MySQL => versión API de cliente habilitada => 5.1.72
Entorno Mac OS X
- 10.7.5
- PHP 5.4.16 (cli) (construido: 22 de agosto de 2013 09:05:58)
php -i
pdo_mysql
Controlador PDO para MySQL => versión de API de cliente habilitada => mysqlnd 5.0.10 - 20111026 - $ Id: e707c415db32080b3752b232487a435ee0372157 $
Indicadores de DOP utilizados
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,
Se agradecería cualquier ayuda y experiencia :) Definitivamente volveré a publicar aquí si encuentro la respuesta.