Já vi essa pergunta ser repetida algumas vezes no Stack Overflow, mas nenhuma explora suficientemente o problema (ou pelo menos de uma forma que seja útil para mim)
O problema é que uma consulta de banco de dados deve retornar tipos de dados inteiros em PHP para colunas inteiras. Em vez disso, a consulta retorna cada coluna como um tipo de string.
Eu assegurei que "PDO :: ATTR_STRINGIFY_FETCHES" seja falso apenas para ter certeza de que os resultados não estão sendo convertidos em string.
Respostas que tenho visto:
- Não pode ser feito
- Não, está funcionando em Mac OS X instalado em PHP / MySQL
- Digite elenco de todos os seus valores em seu código
- Não, eu não vou fazer isso
- Não se preocupe com isso, o PHP é mal digitado
- Meus dados são enviados como JSON e são consumidos por muitos outros serviços, alguns requerem os dados no formato correto
Pela minha pesquisa, entendo que este é um problema de implementação do driver.
Muitas fontes afirmam que o driver nativo do MySQL não suporta o retorno de tipos numéricos. Isso não parece verdade, pois funciona no Mac OS X. A menos que eles digam que "o driver nativo do MySQL no Linux não suporta o recurso".
Isso implica que há algo especial sobre o driver / ambiente que instalei no Mac OS X. Tenho tentado identificar as diferenças para aplicar uma correção, mas estou limitado por meu conhecimento de como verificar essas coisas.
As diferenças:
- PHP no OS X foi compilado e instalado através do Home Brew
- PHP no Ubuntu foi instalado via "apt-get install php5-dev"
- PHP no OS X está se conectando a um servidor MySQL também rodando no OS X
- Versão do servidor: 5.1.71-log de distribuição de origem
- PHP no Ubuntu está se conectando a um banco de dados Rackspace Cloud
- Versão do servidor: 5.1.66-0 + squeeze1 (Debian)
Ambiente Ubuntu
- Versão: 10.04.1
- PHP 5.4.21-1 + debphp.org ~ lucid + 1 (cli) (construído em: 21 de outubro de 2013 08:14:37)
php -i
pdo_mysql
Driver PDO para MySQL => versão API do cliente habilitada => 5.1.72
Ambiente Mac OS X
- 10.7.5
- PHP 5.4.16 (cli) (construído em: 22 de agosto de 2013 09:05:58)
php -i
pdo_mysql
Driver PDO para MySQL => versão API do cliente habilitada => mysqlnd 5.0.10 - 20111026 - $ Id: e707c415db32080b3752b232487a435ee0372157 $
Sinalizadores PDO usados
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,
Qualquer ajuda e conhecimento seriam apreciados :) Definitivamente estarei postando de volta aqui se eu encontrar a resposta.