PHP脚本循环不工作

PHP脚本循环不工作,php,while-loop,Php,While Loop,我有以下脚本: <?php ini_set('max_execution_time', 0); include("../includes/mysqli.php"); $pointsvar = 50000; $inserts = 0; $locationvar = 32000006; while($locationvar <= 32000260){ while($pointsvar >= 20000){ $url = "http://185.112.

我有以下脚本:

<?php
ini_set('max_execution_time', 0);
include("../includes/mysqli.php");
$pointsvar = 50000;
$inserts = 0;
$locationvar = 32000006;

while($locationvar <= 32000260){

    while($pointsvar >= 20000){

        $url = "http://185.112.249.77:9999/Api/Search?search=&level=0&min=1&max=50&points=$pointsvar&loc=$locationvar";
        $jsondata = file_get_contents($url);
        $data = json_decode($jsondata, true);

        $in=$data['clanList'];
        $results = $data['results']; //max is 64
        $i = 0;

        while($i + 1 <= $results){

            $clanid = $in[$i]['id'];
            $clanname = mysqli_real_escape_string($con,$in[$i]['name']);
            $clanplayerCount = $in[$i]['playerCount'];
            $clanwarswon = $in[$i]['warsWon'];
            $clanwarslost = $in[$i]['warsLost'];
            $clanwarstied = $in[$i]['warsTied'];
            $clanLocation = mysqli_real_escape_string($con,$in[$i]['clanLocation']);
            $clanlevel = $in[$i]['level'];
            $score = $in[$i]['score'];

            $sql = "INSERT INTO activeclans(id, name, location, playercount, clanlevel, warswon, warslost, warstied, score)
            VALUES('$clanid', '$clanname', '$clanLocation', '$clanplayerCount', '$clanlevel', '$clanwarswon', '$clanwarslost', '$clanwarstied', $score)";

            mysqli_query($con, $sql);
            $i++;
            $inserts++;
        }
        $pointsvar = $pointsvar-500;
        sleep(1);
    }
    $locationvar++;
    sleep(1);
}
echo "Inserted $inserts";
?>

您没有重置
$pointsvar=50000当第二个循环完成时。因此,我希望第二个循环只在第一次绕外循环运行。所以

<?php
ini_set('max_execution_time', 0);
include("../includes/mysqli.php");
$pointsvar = 50000;
$inserts = 0;
$locationvar = 32000006;

while($locationvar <= 32000260){

    while($pointsvar >= 20000){

        $url = "http://185.112.249.77:9999/Api/Search?search=&level=0&min=1&max=50&points=$pointsvar&loc=$locationvar";
        $jsondata = file_get_contents($url);
        $data = json_decode($jsondata, true);

        $in=$data['clanList'];
        $results = $data['results']; //max is 64
        $i = 0;

        while($i + 1 <= $results){

            $clanid = $in[$i]['id'];
            $clanname = mysqli_real_escape_string($con,$in[$i]['name']);
            $clanplayerCount = $in[$i]['playerCount'];
            $clanwarswon = $in[$i]['warsWon'];
            $clanwarslost = $in[$i]['warsLost'];
            $clanwarstied = $in[$i]['warsTied'];
            $clanLocation = mysqli_real_escape_string($con,$in[$i]['clanLocation']);
            $clanlevel = $in[$i]['level'];
            $score = $in[$i]['score'];

            $sql = "INSERT INTO activeclans(id, name, location, playercount, clanlevel, warswon, warslost, warstied, score)
            VALUES('$clanid', '$clanname', '$clanLocation', '$clanplayerCount', '$clanlevel', '$clanwarswon', '$clanwarslost', '$clanwarstied', $score)";

            mysqli_query($con, $sql);
            $i++;
            $inserts++;
        }
        $pointsvar = $pointsvar-500;
        sleep(1);
    }
    $locationvar++;

    // RESET The pointsvar counter
    $pointsvar = 50000;

    sleep(1);
}
echo "Inserted $inserts";
?>

用于
循环,而不是
循环,以确保每次正确初始化变量

$inserts = 0;
for ($locationvar = 32000006; $locationvar <= 32000260; $locationvar++){

    for ($pointsvar = 50000; $pointsvar >= 20000; $pointsvar -= 500){

        $url = "http://185.112.249.77:9999/Api/Search?search=&level=0&min=1&max=50&points=$pointsvar&loc=$locationvar";
        $jsondata = file_get_contents($url);
        $data = json_decode($jsondata, true);

        $in=$data['clanList'];
        $results = $data['results']; //max is 64

        for ($i = 0; $i < $results; $i++){

            $clanid = $in[$i]['id'];
            $clanname = mysqli_real_escape_string($con,$in[$i]['name']);
            $clanplayerCount = $in[$i]['playerCount'];
            $clanwarswon = $in[$i]['warsWon'];
            $clanwarslost = $in[$i]['warsLost'];
            $clanwarstied = $in[$i]['warsTied'];
            $clanLocation = mysqli_real_escape_string($con,$in[$i]['clanLocation']);
            $clanlevel = $in[$i]['level'];
            $score = $in[$i]['score'];

            $sql = "INSERT INTO activeclans(id, name, location, playercount, clanlevel, warswon, warslost, warstied, score)
                    VALUES('$clanid', '$clanname', '$clanLocation', '$clanplayerCount', '$clanlevel', '$clanwarswon', '$clanwarslost', '$clanwarstied', $score)";

            mysqli_query($con, $sql);
            $inserts++;
        }
        sleep(1);
    }
    sleep(1);
}
echo "Inserted $inserts";
因此,在脚本中,可以在循环过程中连接所有的值,然后在循环结束时插入该批。所以它看起来像:

        $values = array();
        for ($i = 0; $i < $results; $i++){

            $clanid = $in[$i]['id'];
            $clanname = mysqli_real_escape_string($con,$in[$i]['name']);
            $clanplayerCount = $in[$i]['playerCount'];
            $clanwarswon = $in[$i]['warsWon'];
            $clanwarslost = $in[$i]['warsLost'];
            $clanwarstied = $in[$i]['warsTied'];
            $clanLocation = mysqli_real_escape_string($con,$in[$i]['clanLocation']);
            $clanlevel = $in[$i]['level'];
            $score = $in[$i]['score'];

            $values[] = "('$clanid', '$clanname', '$clanLocation', '$clanplayerCount', '$clanlevel', '$clanwarswon', '$clanwarslost', '$clanwarstied', $score)";
        }
        $sql = "INSERT INTO activeclans(id, name, location, playercount, clanlevel, warswon, warslost, warstied, score)
                VALUES " . implode(', ', $values);
        mysqli_query($con, $sql);
        $inserts += count($values);
$values=array();
对于($i=0;$i<$results;$i++){
$clandid=$in[$i]['id'];
$clanname=mysqli\u real\u escape\u字符串($con,$in[$i]['name']);
$clanplayerCount=$in[$i]['playerCount'];
$clanwarswon=$in[$i]['warsWon'];
$clanwarslost=$in[$i]['warsLost'];
$clanwarstied=$in[$i]['warsTied'];
$clanLocation=mysqli\u real\u escape\u字符串($con,$in[$i]['clanLocation']);
$clanlevel=$in[$i]['level'];
$score=$in[$i]['score'];
$values[]=“('$clanid'、'$clanname'、'$clanLocation'、'$clanplayerCount'、'$clanlevel'、'$clanwarswon'、'$clanwarslost'、'$clanwarstied'、$score)”;
}
$sql=“插入到activeclans中(id、名称、位置、玩家计数、部族级别、warswon、warslost、warstied、分数)
价值观”。内爆(“,”,$value);
mysqli_查询($con,$sql);
$inserts+=计数($values);

您已经完成了哪些调试。如果它说“插入0”,那么它不会进入第三个while循环。检查您的变量是否返回您期望的值,以及条件是否确实在传递。@JonStirling当我没有第一个while循环,只是手动设置了
locationvar
时,它就起作用了。。。我确信它是正确的,所以我很困惑。如果它在您添加
while($locationvar)之前起作用,那么您不会在循环中重置
$pointsvar
。因此,在外部循环的第一次迭代之后,
while($pointsvar>=20000)
循环将立即退出。尝试使用
进行
循环,而不是
循环时,您不太可能遇到这样的问题。这样可读性更高,无需担心重置条件或无限循环。虽然查询内容看起来很有趣,但我不明白您的意思。是否要扩展?:)没有,
$data['results']
clanList
中的氏族数相同,我已将其添加到答案中。@Barmar正在测试脚本:D
        $values = array();
        for ($i = 0; $i < $results; $i++){

            $clanid = $in[$i]['id'];
            $clanname = mysqli_real_escape_string($con,$in[$i]['name']);
            $clanplayerCount = $in[$i]['playerCount'];
            $clanwarswon = $in[$i]['warsWon'];
            $clanwarslost = $in[$i]['warsLost'];
            $clanwarstied = $in[$i]['warsTied'];
            $clanLocation = mysqli_real_escape_string($con,$in[$i]['clanLocation']);
            $clanlevel = $in[$i]['level'];
            $score = $in[$i]['score'];

            $values[] = "('$clanid', '$clanname', '$clanLocation', '$clanplayerCount', '$clanlevel', '$clanwarswon', '$clanwarslost', '$clanwarstied', $score)";
        }
        $sql = "INSERT INTO activeclans(id, name, location, playercount, clanlevel, warswon, warslost, warstied, score)
                VALUES " . implode(', ', $values);
        mysqli_query($con, $sql);
        $inserts += count($values);