Jag implementerade mycket av Zend_Db
kod i Zend Framework.
Som andra har sagt, anledningen till att Zend_Db
returnerar strängar istället för inbyggda PHP-heltal eller flytande är att PHPs databastillägg returnerar strängar. Och anledningen till det är att det kanske inte finns någon inbyggd PHP-typ som representerar en viss databastyp.
Till exempel MySQL:s BIGINT
är ett 64-bitars signerat heltal. Som standard är PHP int
typen är begränsad till 32-bitars värden, så om du hämtar data från databasen och implicit konverterar den till int
, kan vissa värden vara trunkerade. Det finns flera andra liknande fall, för float
och datum osv.
Att använda strängrepresentationen för alla datatyper är det bästa sättet att förbli enkelt och konsekvent, vara säker på att undvika dataförlust och undvika att skriva massor av leverantörsspecifik specialfallskod för att göra datatypsmapping. Den extra koden skulle också medföra prestationsstraff.
Så om du har specifika fall där du behöver databasresultat som ska mappas till inbyggda PHP-datatyper, bör du implementera det själv i din applikationskod (t.ex. i en anpassad Zend_Db_Table_Row
klass).