【问题标题】:8 byte Integer with Doctrine and PHP带有 Doctrine 和 PHP 的 8 字节整数
【发布时间】:2011-01-31 09:40:46
【问题描述】:

玩家:

  1. 64 位 linux 与
  2. php 5 (ZendFramework 1.10.2)
  3. PostgreSQL 8.3
  4. 教义 1.2

通过 Flash/Flex 客户端,我得到一个 8 字节的整数值。
数据库中的字段是 BIGINT(8 字节)

PHP_INT_SIZE 表明系统支持 8 字节整数。

按原样和 intval() 打印出代码中的值会导致:

Plain:  1269452776100  
intval: 1269452776099  

浮点舍入失败?

但真正让我抓狂的是

错误:整数的输入语法无效:“1269452776099.000000”'

当我尝试在查询中使用它时。喜欢:

Doctrine_Core::getTable('table')->findBy('external_id',$external_id);

Doctrine_Core::getTable('table')->findBy('external_id',intval($external_id));

我应该如何处理这个?或者我怎样才能给教义一个浮点数,它应该在 bigint 字段上使用?

非常感谢任何帮助!
TIA

编辑:

来自模型:

    $this->hasColumn('external_id', 'integer', 8, array(
     'type' => 'integer',
     'length' => 8,
     'fixed' => false,
     'unsigned' => false,
     'notnull' => false,
     'primary' => false,
     ));

数据库字段为 bigint 8 字节。

编辑2: http://bugs.php.net/bug.php?id=48924 似乎是问题的根源

【问题讨论】:

  • 您是从数据库、从 yaml 模式构建 rou 模型,还是手动创建它?听起来您对列的模型定义与其实际类型之间存在差异。
  • yaml 是从 DB 构建的,模型是从 yaml 构建的。模型定义和数据库是正确的。
  • PostgreSQL 7.3?你确定吗?把它送到博物馆,那是它所属的地方。没有支持,没有更新,没有安全性。还是您的意思是 8.3 版?

标签: php postgresql floating-point doctrine integer


【解决方案1】:

正如你已经提到的,你点击this bug

要解决此问题,请将参数作为字符串传递,并确保在数据库端将其转换为 BIGINT

$q = Doctrine_Query::create();
$q->from('table AS t')
  ->where("t.external_id = CAST(:external_id AS BIGINT)", array(':external_id'  => $external_id))
  ->limit(1);
$result = $q->execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-29
    • 2019-02-12
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    相关资源
    最近更新 更多