8-байтовое целое число с Doctrine и PHP - PullRequest
2 голосов
/ 24 марта 2010

игроков:

  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?

Любая помощь очень ценится!
ТИА

EDIT:

от модели:

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

Поле базы данных - bigint 8 байтов.

EDIT2: http://bugs.php.net/bug.php?id=48924 кажется корень проблемы

1 Ответ

1 голос
/ 25 марта 2010

Как вы уже упоминали, вы нажали эту ошибку .

Чтобы обойти это, передайте параметр в виде строки и убедитесь, что он преобразован в 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...