【问题标题】:Laravel : Function Always Insert One Number To DB In LOOPLaravel:函数总是在循环中向数据库插入一个数字
【发布时间】:2017-03-14 19:26:29
【问题描述】:

我想创建一些基于毫秒的随机代码。 当我使用“var_dump”时,它表明我的函数工作正常并且创建了太多的 $result 数字。但是当我使用 ORM INSERT 语句将它们保存到我的数据库中时,它总是 SAVE : 2147483648 在数据库中,它似乎不取决于我的 $result !!!!!! 这是我的代码:

    public function Timer($Number)
    {
$i=0;
        while ($i<$Number)
        {
            $microtime = microtime(true);
            $milliseconds = sprintf("%02d", ($microtime - floor($microtime)) * 96 * 62 * 23 * 43);
            $result=date('His'. $milliseconds, $microtime)."";
            $result=substr($result,1,11);
            DB::table('form')->insert([
                'Number' => $result,
                'IsValid' => false
            ]);
$i++;
        }
    }

【问题讨论】:

  • 你想在这里插入什么样的数据? sprintfsubstrdate 的奇怪用法对我来说没有任何意义。
  • 我以毫秒为单位获取时间,并将其乘以一些随机数并获取前 11 个数字以创建随机且不可预测的代码。但我的问题不是关于这个算法的使用......我的问题是关于我所说的问题!
  • 这里没有什么是随机的或不可预测的。如果您想要随机值,请使用 mt_rand 之类的内容。

标签: php mysql laravel orm while-loop


【解决方案1】:

2147483647maximum number for signed INT。所以,尝试使用无符号的BIGINTVARCHAR 来存储值。

或者您可以使用其他方式来构建随机代码,例如 str_random() 或类似的东西。

【讨论】:

  • 对于数值数据,BIGINT 优于 VARCHAR
  • @tadman,如果 OP 只是想获得一些随机代码,那么他使用什么并不重要。如果他想保留数字,那么可以肯定,BIGINT 将是最佳选择。但是如果他想生成类似292232322433724036854775807 的东西怎么办。即使BIGINT 也无法存储它。
  • 我喜欢你的 str_random() 想法,因为它不太可能发生冲突。
猜你喜欢
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多