J'ai implémenté beaucoup de Zend_Db
code dans Zend Framework.
Comme d'autres l'ont dit, la raison pour laquelle Zend_Db
renvoie des chaînes au lieu d'entiers ou de flottants PHP natifs est que les extensions de base de données de PHP renvoient des chaînes. Et la raison en est qu'il se peut qu'il n'y ait pas de type PHP natif pour représenter un certain type de base de données.
Par exemple, le BIGINT
de MySQL est un entier signé 64 bits. Par défaut, le PHP int
type est limité aux valeurs 32 bits, donc si vous récupérez les données de la base de données et les convertissez implicitement en int
, certaines valeurs peuvent être tronquées. Il existe plusieurs autres cas similaires, pour float
et les dates, etc.
L'utilisation de la représentation sous forme de chaîne pour tous les types de données est le meilleur moyen de rester simple et cohérent, d'être sûr d'éviter la perte de données et d'éviter d'écrire beaucoup de code de cas particulier spécifique au fournisseur pour effectuer le mappage des types de données. Ce code supplémentaire entraînerait également une pénalité de performance.
Donc, si vous avez des cas spécifiques où vous avez besoin que les résultats de la base de données soient mappés aux types de données PHP natifs, vous devez l'implémenter vous-même dans votre code d'application (par exemple, dans un Zend_Db_Table_Row
personnalisé classe).