首页 > 解决方案 > 嵌套的while循环在第一次迭代PHP后停止

问题描述

我对此很陌生,所以我可能缺少一些非常基本的东西,但我正在尝试编写一些 PHP 脚本。我想规范化我的主数据表,这是关于二手车、品牌、型号、价格等的信息。所以我有另一个表,其中包含所有独特的汽车制造商,它在我的脚本中存储了makeName一个唯一的 id ,makeId我连接到数据库,从主表中读取所有数据,将其作为 SQL 查询运行,然后将其存储为变量。我对make桌子做同样的事情。

然后我尝试运行一个嵌套的 while 循环,将Manufacturer列中主表中的所有字符串替换makeId为表中的字符串,make以便我可以链接这两个表。它适用于一次迭代然后停止,我尝试在其中一个和两个while循环!==FALSE之后添加fetch_assoc,但这给了我我认为的无限循环。这是我的代码...

<?php

include("conn.php");

$sqlAll= "SELECT * FROM carData";

$carDataResult = $conn->query($sqlAll);

if(!$carDataResult){
    echo $conn->error;
    die();
}

$sqlMake = "SELECT * FROM 000make";
$makeResult = $conn->query($sqlMake);  

if(!$makeResult){
    echo $conn->error;
    die();
}  

while ( $make =$makeResult-> fetch_assoc()){

    $makeID = $make['makeId'];
    $makeName = $make['makeName'];

    while ($row = $carDataResult->fetch_assoc()){
    
        $sqlUpdate="UPDATE carData SET Manufacturer = '$makeID'
           WHERE Manufacturer='$makeName' AND Manufacturer IS NOT NULL";
        
        $res = $conn->query($sqlUpdate);
 
        if(!$res){
            echo $conn->error;
            die();
        }
    }
}

?>

标签: phpmysqlloopswhile-loopnested

解决方案


在我发布问题后大约 10 分钟,在盯着这个问题看了一整天之后,我意识到我根本不需要嵌套循环并编写了下面的代码,虽然很笨重,但它解决了问题,但我更喜欢你的解决方案@TangentiallyPerpendicular ...感谢您的帮助...

while ($make =$makeResult-> fetch_assoc()){

     $makeID = $make['makeId'];
     $makeName = $make['makeName'];

      $sqlUpdate="UPDATE carData SET Manufacturer = '$makeID'
      WHERE Manufacturer='$makeName' AND Manufacturer IS NOT NULL";
        
      $res = $conn->query($sqlUpdate);
 
      if(!$res){
          echo $conn->error;
          die();
      }
 }

推荐阅读