ランダムな文字列を生成する次の関数があります。
public function generateString(){
function generateCharacter () {
$possible = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
return $char;
}
function generateNumber () {
$GUID = generateCharacter().generateCharacter().generateCharacter().generateCharacter().generateCharacter().generateCharacter().generateCharacter().generateCharacter().generateCharacter();
return $GUID;
}
$string = generateNumber();
return $string;
}
次に、for ループを使用してこれらのランダムな文字列を x 回生成し、MySQL テーブルに挿入できるようにする必要があります。
$how_many
ループする回数を選択する場所です。
for ($i = 1; $i <= $how_many; $i++) {
$random = $this->generateString();
$query_params = array(
':code' => $random,
);
$query = "
INSERT INTO table
(
code
)
VALUES
(
:code
)
";
try {
$stmt = DB::get()->prepare($query);
$stmt->execute($query_params);
}
catch(PDOException $ex) {}
}
上記は私にエラーを与えます:
Fatal error: Cannot redeclare generateCharacter() (previously declared in....
関数を for ループに入れることができないことはわかっています。それ以外の場合はこのエラーが発生しますが、ループの外にある場合は、文字列が 1 回だけ生成され、毎回同じ文字列が挿入されます。
ループ内の各挿入が新しいランダム文字列になるようにするにはどうすればよいですか?