Ho visto questa domanda ripetuta alcune volte su Stack Overflow ma nessuna esplora sufficientemente il problema (o almeno in un modo che mi è utile)
Il problema è che una query DB dovrebbe restituire tipi di dati interi in PHP per colonne intere. La query restituisce invece ogni colonna come un tipo di stringa.
Ho assicurato che "PDO :: ATTR_STRINGIFY_FETCHES" se falso solo per assicurarmi che i risultati non venissero trasmessi alla stringa.
Risposte che ho visto:
- Non si può fare
- No, funziona su Mac OS X installato PHP / MySQL
- Digita cast tutti i tuoi valori nel codice
- No, non lo farò
- Non preoccuparti, PHP è digitato in modo approssimativo
- I miei dati vengono emessi come JSON e vengono utilizzati da molti altri servizi, alcuni richiedono i dati nel formato corretto
Dalla mia ricerca ho capito che questo è un problema di implementazione del driver.
Molte fonti affermano che il driver nativo di MySQL non supporta la restituzione di tipi numerici. Questo non sembra vero dato che funziona su Mac OS X. A meno che non vogliano dire che "il driver nativo di MySQL su Linux non supporta la funzionalità".
Ciò implica che c'è qualcosa di speciale nel driver / ambiente che ho installato su Mac OS X. Ho cercato di identificare le differenze per applicare una correzione, ma sono limitato dalla mia conoscenza di come controllare queste cose.
Le differenze:
- PHP su OS X è stato compilato e installato tramite Home Brew
- PHP su Ubuntu è stato installato tramite "apt-get install php5-dev"
- PHP su OS X si connette a un server MySQL in esecuzione anche su OS X
- Versione server: distribuzione dell'origine 5.1.71-log
- PHP su Ubuntu si sta connettendo a un database Rackspace Cloud
- Versione server: 5.1.66-0 + squeeze1 (Debian)
Ambiente Ubuntu
- Versione: 10.04.1
- PHP 5.4.21-1 + debphp.org ~ lucid + 1 (cli) (costruito: 21 ottobre 2013 08:14:37)
php -i
pdo_mysql
PDO Driver for MySQL => versione API client abilitata => 5.1.72
Ambiente Mac OS X.
- 10.7.5
- PHP 5.4.16 (cli) (costruito: 22 agosto 2013 09:05:58)
php -i
pdo_mysql
PDO Driver for MySQL => versione API client abilitata => mysqlnd 5.0.10 - 20111026 - $ Id: e707c415db32080b3752b232487a435ee0372157 $
Bandiere DOP utilizzate
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,
Qualsiasi aiuto e competenza sarebbero apprezzati :) Sicuramente pubblicherò qui se trovo la risposta.