Php 如何在mysqli_查询中使用$row结果?

Php 如何在mysqli_查询中使用$row结果?,php,mysql,mysqli,row,rows,Php,Mysql,Mysqli,Row,Rows,如何在mysqli_查询中使用$row结果 $result1 = mysqli_query($connect,"SELECT subcat_ID FROM subcategories WHERE cat_ID=$cat_ID"); $row=mysqli_fetch_array($result1); $result2 = mysqli_query($connect,"SELECT subsubcat_name FROM subsubcategories WHERE subcat_ID='".$r

如何在mysqli_查询中使用$row结果

$result1 = mysqli_query($connect,"SELECT subcat_ID FROM subcategories WHERE cat_ID=$cat_ID");
$row=mysqli_fetch_array($result1);
$result2 = mysqli_query($connect,"SELECT subsubcat_name FROM subsubcategories WHERE subcat_ID='".$row['subcat_ID']."'");
while ($row = mysqli_fetch_array($result2)){
        if (isset($row)){
        echo $row['subsubcat_name'];
        echo "<br>";
        }

我希望这能让事情更清楚一些。

下面是一个关于如何使用mysqli的示例

面向对象

<?php   
    $connect= new mysqli("localhost","user","passwd","database");
    if ($connect->connect_errno){
      echo "could not connect";
    }

    $select = "SELECT * FROM tablename";

    if($result = $connect->query($select)){
        while($row = $result->fetch_object()){
            echo $row->rowname."<br>";
        }
    }
    else { echo 'no result'; }
    $connect->close();  
?>

程序风格

<?php   
    $connect= mysqli_connect("localhost","user","passwd","database");
    if (mysqli_connect_errno()){
      echo "could not connect";
    }

    $select = "SELECT * FROM tablename";

    if($result = mysqli_query($connect,$select)){
        while($row = mysqli_fetch_object($result)){
            echo $row->rowname."<br>";
        }
    }
    else { echo 'no result'; }
    mysqli_close($connect);  
?>

您不应该运行两个查询,而应该使用一个
JOIN

例如,此
$query

SELECT subcategories.cat_ID, subsubcategories.subsubcat_name
FROM subcategories
INNER JOIN subsubcategories
ON subcategories.cat_ID=subsubcategories.subcat_ID
WHERE subcategories.cat_ID = ?
在这种情况下,准备查询更合适/更安全:

/* create a prepared statement */
if ($result = mysqli_prepare($connect, $query)) {

    /* bind parameters for markers */
    mysqli_stmt_bind_param($result, "i", $cat_ID);

    /* execute query */
    mysqli_stmt_execute($result);

    /* fetch data */
    while ($row = mysqli_fetch_array($result)){
        if (isset($row)){
            echo $row['subsubcat_name'];
            echo "<br>";
        }
    }
 }
虽然不确定这是安全的方法。欢迎提出建议。

感谢meda向我展示了另一种方法,虽然它与代码不完全相同。

您的第一个WHERE语句应该在
中。
此外,您不需要检查
$row
是否设置在
while($row…
中,因为如果您在
while($row…
中,那么您就知道它已设置。也许您的意思是
isset($row['subsubcat_name'])
?感谢您回复rybo111。“在键入我的问题时是一个打字错误。对此表示抱歉。即使我使用isset($row['subsubcat_name']),它也不会显示任何内容。没有错误,没有输出。顺便说一句,感谢您提供有关检查是否设置了$row的提示。请尝试将SQL查询设置为如下变量:
$SQL=“选择…
然后回显它。然后在phpMyAdmin中运行该查询。它可能会在那里显示错误。这是面向对象的样式。OP使用的是过程样式。我以前从未编程过面向对象。当我在代码中实现您的示例时,它会给我错误:“注意:未定义变量:con in”和“致命错误:对中的非对象调用成员函数query()。您必须首先设置连接变量。如下所示。$con=new mysqli(“localhost”、“user”、“passwd”、“database”);@Thoaren在您的情况下是$connect=new mysqli(“localhost”、“user”、“passwd”、“database”);我编辑了代码看例子2:哦,很好,谢谢!没有想到这种方法。今晚我要测试它。谢谢meda!@Thoare你可以查看更多信息。我只会运行两个查询,如果它们不同,比如选择然后更新。好吧,这次你打算回答“问题的总体方向”“很有道理。不过它缺少正确的语法。像往常一样。@YourCommonSense,所以请帮助修复;)我遇到了这个错误:“警告:mysqli_stmt_bind_param():类型定义字符串中的元素数与”中的绑定变量数不匹配,在这一行:“mysqli_stmt_bind_param($result,“I”,$cat_ID);”
/* create a prepared statement */
if ($result = mysqli_prepare($connect, $query)) {

    /* bind parameters for markers */
    mysqli_stmt_bind_param($result, "i", $cat_ID);

    /* execute query */
    mysqli_stmt_execute($result);

    /* fetch data */
    while ($row = mysqli_fetch_array($result)){
        if (isset($row)){
            echo $row['subsubcat_name'];
            echo "<br>";
        }
    }
 }
$result=mysqli_query($connect,"SELECT subcategories.cat_ID, subsubcategories.subsubcat_name FROM subcategories INNER JOIN subsubcategories ON subcategories.subcat_ID=subsubcategories.subcat_ID WHERE subcategories.cat_ID = $cat_ID OR subcategories.extra_cat_ID = $cat_ID");
while ($row = mysqli_fetch_array($result)){
        echo $row['subsubcat_name'];
            echo "<br>";
 }