mt_rand相同的数字,symfony2

时间:2014-02-01 16:48:08

标签: php symfony numbers fosuserbundle

我目前正在使用symfony2。我已经创建了我想要的用户实体,但是我遇到了一个大问题而且不知道它是由什么造成的:

我希望有一个长度为10个字符的随机数。

ID字段:

/**
     * @ORM\Id
     * @ORM\Column(type="integer", unique=true)
     * 
     */
    protected $id;

setId,所以在持久化

之前生成一个随机数
/**
     * Set id
     *
     * @param integer $id
     * @return UserReg
     * @ORM\PrePersist
     */
    public function setId($id)
    {
        $number = mt_rand(1000000000, 9999999999);
        $this->id = $number;

        return $this;
    }

如果我在一个完全新鲜的控制器上运行相同的功能,除了生成数字并放弃之外什么都不做......它可以工作。每当我刷新页面时,都会出现一个随机数字。

但不知何故,它不适用于用户注册。一遍又一遍地生成相同的数字。在我使用Lifecycle Callbacks并尝试在寄存器控制器中生成数字之前,同样的结果......我现在正试图直接使用实体生成数字,因为你可以看到并仍然......相同的数字,结束再一次。

我缺少什么?

我希望有人能帮忙......

此致

编辑:

有时会生成一个不同的随机数,但大多数时候它都是相同的。 F.e: 1.注册号:2147483647 2.注册号:1749450073 3.注册:重复录入(2147483647)。

我刚刚看了一下错误信息:

An exception occurred while executing 'INSERT INTO UserReg (username, username_canonical, email, email_canonical, enabled, salt, password, last_login, locked, expired, expires_at, confirmation_token, password_requested_at, roles, credentials_expired, credentials_expire_at, id, firstname, lastname, birthdate, secretq, secreta, registered, banned, frozen, creditpoints, country, verified, referralcode, referree, messages) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["testmail3@test.com", "testmail3@test.com", "testmail3@test.com", "testmail3@test.com", 0, "gqd6kqolwk084gwg4ggwwsc8kokwk0k", "$2y$13$gqd6kqolwk084gwg4ggwwetuZOQlZzCjlPt7HmZ4RMp7LBITBZ8Wy", null, 0, 0, null, "i_cVQFp-cG5KyQ70eqMZH6y32lAZEtEsvWkIG7bbcrQ", null, "a:0:{}", 0, null, **2179120243**, "Max", "Mustermann", "1894-01-01 00:00:00", "What was your childhood nickname", "asd", "2014-02-01 18:30:03", "no", null, "150", "Austria", "no", "c46c6fcaaaae7a606fd25185ec860fd1", null, "0"]:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '**2147483647**' for key 'PRIMARY'

我没有得到错误:sql insert显示的ID与错误消息中的ID不同。

1 个答案:

答案 0 :(得分:1)

问题在于你达到整数的最大大小,2 ^ 31-1 = 2147483647.将数字生成为字符串,你会没事的。

那就是说,你应该只使用MySQL的顺序auto_incremenet作为ID。