代码之家  ›  专栏  ›  技术社区  ›  Itay Moav -Malimovka

使用Zend框架从数据库中提取整数时,返回字符串形式的值

  •  11
  • Itay Moav -Malimovka  · 技术社区  · 15 年前

    当我使用ZF包装器运行一个SQL查询时,所有的数值都作为字符串返回。 我需要更改什么,以便值返回与DB中相同的数据类型?

    4 回复  |  直到 11 年前
        1
  •  9
  •   Bill Karwin    15 年前

    我实施了很多 Zend_Db Zend框架中的代码。

    正如其他人所说,原因是 登达数据库 返回字符串而不是本机php整数或float是php的数据库扩展返回字符串。原因是可能没有本地PHP类型来表示特定的数据库类型。

    例如,mysql的 BIGINT 是64位有符号整数。默认情况下,php int 类型限制为32位值,因此如果从数据库中提取数据并将其隐式转换为 int ,某些值可能被截断。还有几个类似的案例 float 日期等。

    对所有数据类型使用字符串表示是保持简单和一致、避免数据丢失以及避免编写大量特定于供应商的特殊情况代码来进行数据类型映射的最佳方法。额外的代码也会导致性能损失。

    因此,如果您有需要将数据库结果映射到本机PHP数据类型的特定情况,您应该在应用程序代码(例如,在自定义 Zend_Db_Table_Row 班级)。

        2
  •  1
  •   MarkusQ    15 年前

    数据库通常以文本形式返回结果集。除非您的DB适配器为您转换内容(听起来您的数据库不转换),否则所有值都将返回为字符串——日期、枚举等以及整数。

    如果您处理的是只有几个整型字段的少数表,只需手工转换它们。如果您处理的是稍微复杂一些的情况,那么可以使用数据库定义(请参见 sqlite_fetch_column_types() 等)。如果您的情况比这些解决方案看起来更复杂,请考虑切换到更具特色的框架。

        3
  •  0
  •   Michael Wales    15 年前

    这似乎是过去请求过的,但尚未实现。 #ZF-300 上次评论是在2009年1月9日。

    也许你可以分享一下为什么你想做排版,我们可以帮你另一种方式?当涉及到变量数据类型时,php相当宽泛…

        4
  •  0
  •   jverdi    11 年前

    例如使用自定义 Zend_Db_Table_Row 要获得正确的数据类型,如Bill Karwin建议的,请查看下面的类: http://www.zfsnippets.com/snippets/view/id/70

    它可以在您的模型中实现为:

    class YourTableName extends Zend_Db_Table_Abstract
    {
        protected $_name = 'your_table_name';
        protected $_rowClass = 'Model_Row_Abstract';
    }
    

    你可能想换 Model_Row_Abstract 的数据类型 tinyint bool 如果严格使用它来保存布尔值。