Widziałem to pytanie powtórzone kilka razy w Stack Overflow, ale żadne z nich w wystarczającym stopniu nie zbadało problemu (lub przynajmniej w sposób, który jest dla mnie pomocny)
Problem polega na tym, że zapytanie DB powinno zwracać w PHP typy danych w postaci liczb całkowitych dla kolumn całkowitych. Zamiast tego kwerenda zwraca każdą kolumnę jako typ ciągu.
Zapewniłem, że „PDO :: ATTR_STRINGIFY_FETCHES” jest fałszywe, aby upewnić się, że wyniki nie są rzutowane na łańcuch.
Odpowiedzi, które widziałem:
- Nie da się tego zrobić
- Nie, to działa na Mac OS X z zainstalowanym PHP / MySQL
- Wpisz rzutuj wszystkie wartości w kodzie
- Nie, nie będę tego robić
- Nie martw się, PHP jest luźno wpisane
- Moje dane są wyprowadzane w formacie JSON i są używane przez wiele innych usług, niektóre wymagają danych w odpowiednim formacie
Z moich badań wynika, że jest to problem dotyczący implementacji sterownika.
Wiele źródeł twierdzi, że natywny sterownik MySQL nie obsługuje zwracania typów liczbowych. Nie wydaje się to prawdą, ponieważ działa w systemie Mac OS X. Chyba że mają na myśli stwierdzenie, że „natywny sterownik MySQL w systemie Linux nie obsługuje tej funkcji”.
Oznacza to, że jest coś szczególnego w sterowniku / środowisku, które zainstalowałem w systemie Mac OS X. Próbowałem zidentyfikować różnice, aby zastosować poprawkę, ale jestem ograniczona wiedzą, jak to sprawdzić.
Różnice:
- PHP na OS X zostało skompilowane i zainstalowane przez Home Brew
- PHP na Ubuntu zostało zainstalowane przez „apt-get install php5-dev”
- PHP na OS X łączy się z serwerem MySQL również działającym na OS X.
- Wersja serwera: 5.1.71-log Dystrybucja źródła
- PHP na Ubuntu łączy się z bazą danych w chmurze Rackspace
- Wersja serwera: 5.1.66-0 + squeeze1 (Debian)
Środowisko Ubuntu
- Wersja: 10.04.1
- PHP 5.4.21-1 + debphp.org ~ lucid + 1 (cli) (zbudowano: 21 października 2013 08:14:37)
php -i
pdo_mysql
Sterownik PDO dla MySQL => włączona wersja Client API => 5.1.72
Środowisko Mac OS X
- 10.7.5
- PHP 5.4.16 (cli) (zbudowano: 22 sierpnia 2013 09:05:58)
php -i
pdo_mysql
Sterownik PDO dla MySQL => włączona wersja Client API => mysqlnd 5.0.10 - 20111026 - $ Id: e707c415db32080b3752b232487a435ee0372157 $
Używane flagi 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,
Będziemy wdzięczni za wszelką pomoc i wiedzę :) Na pewno wrócę tutaj, jeśli znajdę odpowiedź.