php - 带有 Doctrine 和 PHP 的 8 字节整数

标签 php postgresql floating-point doctrine integer

玩家:

  1. 64 位 Linux 与
  2. php 5 (ZendFramework 1.10.2)
  3. PostgreSQL 8.3
  4. Doctrine 1.2

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

PHP_INT_SIZE 表明系统支持 8byte 整数。

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

Plain:  1269452776100  
intval: 1269452776099  

float 舍入失败?

但真正让我抓狂的是

ERROR: invalid input syntax for integer: "1269452776099.000000"'

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

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

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

我该如何处理?或者我如何给 doctrine 一个它应该在 bigint 字段上使用的 float ?

非常感谢任何帮助!
时间差

编辑:

来自模型:

    $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似乎是问题的根源

最佳答案

正如您已经提到的,您点击了 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();

关于php - 带有 Doctrine 和 PHP 的 8 字节整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2510282/

相关文章:

performance - 使用输入变量时 Postgres 的运行速度要慢得多

c - 将 csv 文件中的浮点值写入新文件并迭代字段

php - 24 :00 and 00:00? 之间的区别

php - laravel 中区分大小写的 where 语句

php - 我应该把我的管理控制面板放在哪里?

sql - 如何在 PostgreSQL 中使用(安装)dblink?

php - Magento 仪表板 > 获取某个日期的总订单数和总装运数

sql - 如何在plpgsql函数中获取当前行值

java - 在 Java 中解析带尾数的 float

c - 为什么我的 if 语句会创建一个无限循环?