【发布时间】:2021-05-27 07:11:50
【问题描述】:
我对此很陌生,所以我可能缺少一些非常基本的东西,但我正在尝试编写一些 PHP 脚本。我想规范化我的主数据表,这是关于二手车、品牌、型号、价格等的信息。所以我有另一个表,其中包含所有独特的汽车制造商,它存储 makeName 和唯一的 id @ 987654324@ 在我的脚本中,我连接到数据库,从主表中读取所有数据,将其作为 SQL 查询运行,然后将其存储为变量。我对make 表也这样做。
然后我尝试运行一个嵌套的 while 循环,将主表中 Manufacturer 列中的所有字符串替换为 make 表中的 makeId,以便我可以链接这两个表。它适用于一次迭代然后停止,我尝试在任一和两个while循环中的fetch_assoc之后添加!==FALSE,但这给了我我认为的无限循环。这是我的代码...
<?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();
}
}
}
?>
【问题讨论】:
-
看起来
$carDataResult->fetch_assoc()只有一行或者die()执行尝试运行print_r($carDataResult->fetch_assoc())并确保你有超过1行,如果只有一行那么逻辑是正确。 -
如果你想多次遍历同一个mysqli结果集,你需要在下一个循环之前重置内部指针,使用mysql::data_seek()。
标签: php mysql loops while-loop nested