玩家:
64位linux
PHP5(ZendFramework1.10.2)
PostgreSQL 8.3版
原则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字段上使用?
非常感谢您的帮助!
短暂性脑缺血发作
编辑:
从模型:
$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/