2016-11-01 7 views
2

Ich möchte einige zufällige Codes basierend auf Millisekunden erstellen. Wenn ich "var_dump" verwende zeigt es an, dass meine Funktion korrekt funktioniert und zu viele $ Ergebnisnummern erzeugt werden. aber wenn ich ORM INSERT-Anweisung verwende, um sie in meiner Datenbank zu speichern, speichert es immer: 2147483648 in der Datenbank und es scheint, dass es nicht von meinem $ Ergebnis abhängt !!!!! hier ist mein Code:Laravel: Funktion Immer eine Nummer in DB einfügen In LOOP

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++; 
     } 
    } 
+0

Welche Art von Daten möchten Sie hier einfügen? Die bizarre Verwendung von 'sprintf' und' substr' und 'date' ergibt für mich keinen Sinn. – tadman

+0

Ich bekomme Zeit in Millisekunde und multipliziere es mit einigen Zufallszahlen und bekomme die ersten 11 Zahlen, um einen zufälligen und unvorhersehbaren Code zu erstellen. aber mein Problem ist nicht über den Gebrauch dieses Algorithmus ... meine Frage ist über das Problem, das ich sagte! – Pedramch

+0

Nichts ist zufällig oder unvorhersehbar. Wenn Sie zufällige Werte wünschen, verwenden Sie etwas wie ['mt_rand'] (http://php.net/manual/en/function.mt-rand.php). – tadman

Antwort

2

2147483647 ist maximum number for signed INT. Versuchen Sie also, unsigned BIGINT oder VARCHAR zu verwenden, um den Wert zu speichern.

Oder Sie könnten einen anderen Weg verwenden, um zufällige Codes zu erstellen, wie str_random() oder etwas ähnliches.

+0

'BIGINT' ist für numerische Daten dem' VARCHAR' vorzuziehen. – tadman

+0

@tadman, wenn OP nur irgendeinen zufälligen Code bekommen will, so ist es egal, was er benutzt. Wenn er Zahlen behalten will, dann ist 'BIGINT' die beste Wahl. Aber was, wenn er etwas wie "292232322433724036854775807" erzeugen möchte. Selbst 'BIGINT' wird das nicht speichern können. –

+1

Ich mag Ihre 'str_random()' Idee, da Kollisionen weniger wahrscheinlich sind. – tadman