Implementoval jsem hodně z Zend_Db
kód v Zend Framework.
Jak uvedli ostatní, důvodem je Zend_Db
vrací řetězce místo nativních PHP celých čísel nebo plovoucích je to, že rozšíření databáze PHP vracejí řetězce. A důvodem je, že nemusí existovat žádný nativní typ PHP, který by reprezentoval určitý typ databáze.
Například BIGINT
MySQL je 64bitové celé číslo se znaménkem. Ve výchozím nastavení PHP int
typ je omezen na 32bitové hodnoty, takže pokud načtete data z databáze a implicitně je převedete na int
, některé hodnoty mohou být zkráceny. Existuje několik dalších podobných případů pro float
a data atd.
Použití řetězcové reprezentace pro všechny datové typy je nejlepším způsobem, jak zůstat jednoduchý a konzistentní, zajistit si bezpečnost před ztrátou dat a vyhnout se psaní velkého množství speciálních kódů specifických pro dodavatele pro mapování datových typů. Tento extra kód by také znamenal penalizaci výkonu.
Pokud tedy máte konkrétní případy, kdy potřebujete mapovat výsledky databáze na nativní datové typy PHP, měli byste to sami implementovat do kódu vaší aplikace (např. do vlastního Zend_Db_Table_Row
třída).