我有以下函数来生成随机字符串:
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 循环中使用该函数,否则我会收到此错误,但如果我在循环之外使用它,它只会生成一次字符串并每次插入相同的字符串。
我怎样才能得到它,以便循环中的每个插入都是一个新的随机字符串?
最佳答案
不要编写已经编写的函数。
PHP 有一个名为 uniqid() 的函数
来自手册
uniqid() Gets a prefixed unique identifier based on the current time in microseconds.
uniqid() 返回的值将是 13 个字符长。如果 more_entropy 为 TRUE,则它将是 23 个字符。
要获取随机数,您可以使用 rand()功能。
在您的代码中,您在循环中多次准备相同的语句。这是非常不好的习惯。在循环之前准备语句,然后只在循环中执行和绑定(bind)参数。这样更有效。
关于php - 在我的 for 循环中生成不同的随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17273660/