玩家:
- 64 位 Linux 与
- php 5 (ZendFramework 1.10.2)
- PostgreSQL 8.3
- 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/