我正在尝试使用以下代码生成 1500 身份验证代码:
<?php
include "../include/top.php";
set_time_limit(0);
ini_set("memory_limit", "-1");
$end=0;
while ($end<1500)
{
//generate an authentication code
$string="ABCDEFGHJKLMNPQRSTUVWXYZ123456789";
$string= substr(str_shuffle($string),5,8) ;
//check whether generated code already exist
$query = "select count(*) from auth where code = '$string' ";
$stmt = prepare ($query);
execute($stmt);
$bind = mysqli_stmt_bind_result($stmt, $count);
check_bind_result($bind);
mysqli_stmt_fetch($stmt);
mysqli_stmt_free_result($stmt);
//If generated code does not already exist, insert it to Database table
if ($count == 0)
{
echo $string."<br>";
$query = "insert into auth (Code) values ('$string')";
$stmt = prepare ($query);
execute($stmt);
$end++;
}
}
?>
它在数据库中生成并插入了 1024 个代码,并在 15 秒内在浏览器中打印了 667 个代码,并且浏览器继续加载而不插入/打印更多代码,直到半小时后我关闭浏览器窗口。之后,当从 WAMP 在浏览器中打开任何网页时,它显示为浏览器正在加载并且不显示内容。也就是说,在打开任何网页之前,我需要在运行此脚本后重新启动 WAMP。我已经试过很多次了。
为什么脚本不生成 1500 个代码并且在达到计数 667/1024 时总是停止?
更新
作为实验,我在 IF 条件中添加了一个 ELSE 子句,并编写了代码以在 ELSE 子句中打印“代码已存在”。并使用同一张表的空(截断)副本运行脚本,然后打印并插入 1024 个代码,然后连续打印“代码已存在”(5 分钟内约有 700 000 多个条目并继续)。再次使用只有 1024 行的表运行脚本时,它甚至不会打印或插入单个代码。相反,它无限地继续打印“代码已经存在”。我观察到的另一件事是,WHILE 循环的第一个 1024 次迭代通过了 IF 条件(如果表为空)。并且所有后续迭代都失败了 IF 条件。