从2个不同的表中获取值时感到困惑

时间:2016-06-07 09:10:34

标签: php mysql sql

我正在尝试将表格“ 链接表格”子类别的列添加到表“item”

因为我不确定自己哪里出错了所以我被困在某个愚蠢的错误中。

我无法获取最后一个“while”的值。我在子类别中使用类别ID来获取类别master中类别名称的链接。

这是警告我正在

  

警告:mysqli_fetch_array()期望参数1为mysqli_result,   第43行的C:\ xampp \ htdocs ** \ itemtable.php中给出的布尔值

This is line 43 : while($cat_name=mysqli_fetch_array($rowvalcatname));(The second last line)

这是我的代码:

    <form name='update' action='updateitemtable.php'>
<input type='hidden' name='itemid' value='$item_id'>
    <tr><td>$item_id</td>
    <td><input type='text' name='itemtablename' value='$row[1]'></td>");
    $rowval=mysqli_query($conn, "SELECT subcatname from subcategorymaster WHERE subcatid = $row[2]");
        while($row2=mysqli_fetch_array($rowval))
        {
            echo"<td>$row2[0]</td>";
        }

    $rowvalcatid=mysqli_query($conn,"SELECT categoryid from subcategorymaster WHERE subcatid=$row[2]");
        while($row3=mysqli_fetch_array($rowvalcatid))
        {

            $rowvalcatname=mysqli_query($conn,"SELECT categoryname from categorymaster WHERE catid=$row3[0]");
            while($cat_name=mysqli_fetch_array($rowvalcatname));
            echo"<td>$cat_name[0]</td>";
        }

4 个答案:

答案 0 :(得分:0)

  

此错误适用于查询后未找到数据时。

您可以更改查询行,如下所示

$rowval=mysqli_query($conn, "SELECT subcatname from subcategorymaster 
  WHERE 
subcatid = ".$row[2]."");

答案 1 :(得分:0)

当您的查询未返回任何结果时,会出现此错误。 在while循环之前检查你的结果。

if($rowvalcatname){
 while($cat_name=mysqli_fetch_array($rowvalcatname));
            echo"<td>$cat_name[0]</td>";
}

答案 2 :(得分:0)

这里的答案略有不同。

你有几个问题。

主要问题是,在每种情况下,您都会循环查询结果,直到结果集结束。在该阶段,您将行分配的值设置为FALSE。然而,然后你尝试使用循环后最后一行的值(在这个阶段它甚至不是一个数组来获取一个值)。

我不确定你为什么要在循环中查询查询结果而不是进行JOIN。

非常基本上是这样的: -

$rowvalcatid=mysqli_query($conn,"SELECT subcategorymaster.categoryid ,
                                                categorymaster.categoryname
                                        FROM subcategorymaster 
                                        LEFT OUTER JOIN categorymaster
                                        ON subcategorymaster.categoryid = categorymaster.catid
                                        WHERE subcatid=$row[2]");

如果您指定要输出的格式,我将使用脚本对其进行修改,以完全循环结果。

假设您只想要类别ID和类别名称(并且存在1对1的关系),那么这样的事情: -

<form name='update' action='updateitemtable.php'>
<input type='hidden' name='itemid' value='$item_id'>
    <tr><td>$item_id</td>
    <td><input type='text' name='itemtablename' value='$row[1]'></td>");
    $rowvalcatid=mysqli_query($conn,"SELECT subcategorymaster.categoryid,
                                            subcategorymaster.subcatname,
                                            categorymaster.categoryname
                                    FROM subcategorymaster 
                                    LEFT OUTER JOIN categorymaster
                                    ON subcategorymaster.categoryid = categorymaster.catid
                                    WHERE subcategorymaster.subcatid=".$row[2]);
    while($row3=mysqli_fetch_assoc($rowvalcatid))
    {
        echo"<td>".$row3['categoryid']."</td>";

        echo"<td>".$row3['categoryname']."</td>";
    }

答案 3 :(得分:0)

检查您的查询是否返回值。将您的代码更改为:

<form name='update' action='updateitemtable.php'>
<input type='hidden' name='itemid' value='$item_id'>
<tr><td>$item_id</td>
<td><input type='text' name='itemtablename' value='$row[1]'></td>");
$rowval=mysqli_query($conn, "SELECT subcatname from subcategorymaster WHERE subcatid = $row[2]");

$count1= mysqli_num_rows($rowval);
if($count1 > 0){ // check if value exist
    while($row2=mysqli_fetch_array($rowval))
    {
        echo"<td>$row2[0]</td>";
    }
} 

$rowvalcatid=mysqli_query($conn,"SELECT categoryid from subcategorymaster WHERE subcatid=$row[2]");
$count2= mysqli_num_rows($rowvalcatid);
if($count2 > 0) { // check if value exist
        while($row3=mysqli_fetch_array($rowvalcatid))
        {

            $rowvalcatname=mysqli_query($conn,"SELECT categoryname from categorymaster WHERE catid=$row3[0]");
            while($cat_name=mysqli_fetch_array($rowvalcatname));
            echo"<td>$cat_name[0]</td>";
        }
}