【问题标题】:Nested While Loop with mysql_fetch_array is giving blank results带有 mysql_fetch_array 的嵌套 While 循环给出空白结果
【发布时间】:2013-09-12 07:18:13
【问题描述】:

我使用了以下代码,如有错误请解决

我正在尝试使用子类别表中的 parentID 从类别表中捕获类别名称

这里是代码

$query_select = "SELECT * FROM subcategory where parentID<>0 and isDisabled=0 and isDeleted=0";
$result_select = mysql_query($query_select) or die(mysql_error());
$rows = array();
while($row = mysql_fetch_array($result_select))
  $rows[] = $row;

foreach($rows as $row){ 
  $id = $row['subcatID'];
  $subname = $row['subcatName'];
  $parentID= $row['parentID'];
  $status = $row['isDisabled'];
  $catname="";
  echo "<tr><td style='display:none;'>$id</td>";
  echo "<td><center>$subname</center></td>";
  $resultnew=mysql_query("select catName from category where catID=$parentID");

  while(mysql_fetch_row($resultnew)){
    $catname = $resultnew[0];
    echo "<script>alert($catname);</script>";
    echo "<td class='center'><center>$catname</center></td>";
  }
  if($status==0)
    {
      echo "<td class='center'><center><span class='label label-success'>Active</span></center></td>";
    }else{
    echo "<td class='center'><center><span class='label label-important'>Disabled</span></center></td>";
  }
  echo "<td class='center'><center>";
  echo "<a class='btn btn-success' href='#'><i class='icon-zoom-in icon-white'></i>View</a>";
  echo "<a class='btn btn-info' href='#'><i class='icon-edit icon-white'></i>Edit</a>";
  echo "<a class='btn btn-danger' href='#'><i class='icon-trash icon-white'></i>Delete</a>";
  echo "</center></td>";
  echo "</tr>";
}

【问题讨论】:

  • 请注意 mysql_* 函数已弃用、不安全且不应使用。考虑使用 mysqli_* 函数或 PDO。
  • 在两种不同的情况下重复使用$row 并没有帮助;使用$oldRow 和$newRow 或类似的,使逻辑更清晰
  • 点重用 $row,尝试使用 while($row = mysql_fetch_array($result_select)) foreach($row as $row1){ 而不是 while($row = mysql_fetch_array($result_select)) $行[] = $行; foreach($rows as $row){
  • 在您的内部while 循环中,您没有将mysql_fetch_row($resultnew) 的结果分配给任何东西。然后下一行使用$resultnew,就好像它是返回的行一样。
  • 您根本不应该使用嵌套查询,您应该在 categories 和 subcategories 表之间进行 LEFT JOIN,以便在一个查询中获取所有内容。

标签: php mysql sql while-loop nested-loops


【解决方案1】:

变化:

  while(mysql_fetch_row($resultnew)){
    $catname = $resultnew[0];
    echo "<script>alert($catname);</script>";
    echo "<td class='center'><center>select catName from category where catID=$parentID $catname</center></td>";
  }

到:

  while($newrow = mysql_fetch_row($resultnew)){
    $catname = $newrow[0];
    echo "<script>alert($catname);</script>";
    echo "<td class='center'><center>select catName from category where catID=$parentID $catname</center></td>";
  }

但是,我认为catID 是唯一键,所以这个查询只能返回一行,所以根本不需要while 循环。随便写:

if ($newrow = mysql_fetch_row($resultnew)) {
    $catname = $newrow[0];
    echo "<script>alert($catname);</script>";
    echo "<td class='center'><center>select catName from category where catID=$parentID $catname</center></td>";
  }

但您也可以将其与您的主查询结合使用,因此您无需执行多个查询:

SELECT s.subcatID, s.subcatName, s.parentID, s.isDisabled, c.catName
FROM subcategory s
LEFT JOIN category c ON c.catID = s.parentID
WHERE s.parentID <> 0 and s.isDisabled = 0 and s.isDeleted = 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2014-04-09
    相关资源
    最近更新 更多