0

这可能是一个简单的问题,但我找不到我能理解的明确答案。我经常使用 PHP 循环,我对 PHP 还很陌生,所以它们通常很简单,如下所示:

    <?php 

    $result = mssql_query("SELECT Price FROM Window_Extras WHERE ExtraID = '4' "); 

    while ($row = mssql_fetch_array($result)) { 
    ?>

<a title="<?php echo $row['Colour']; ?>"></a>

<?php }?>

是一个非常简单的例子,没有多大意义,但我希望它能展示我如何使用它们。我想问的问题是,是否必须将 $row 和 $result 命名为才能正常工作,例如可以将它们命名为 $priceresult 和 $pricerow 吗?

这是因为有时我想对单个循环使用多个查询,例如:

<?php 

    $result = mssql_query("SELECT Price FROM Extras WHERE ExtraID = '4' ");
$colourresult = mssql_query("SELECT ColourID FROM Colours WHERE Type = '8' ");

    while ($row = mssql_fetch_array($result, $colourresult)) { 
    ?>

然而,当我试图回应时,这并没有奏效:

<?php echo $row['ColourID']; ?>

谁能告诉我应该如何处理这个问题,以及我是否在正确的轨道上。对不起,如果我没有很好地解释它。

4

3 回答 3

2

要回答您的第一个问题:

是的,您可以为结果和行变量使用您喜欢的任何变量名称。PHP 不在乎您如何称呼它们,事实上,在任何给定时间使用它们中的几个是完全可能的,在这种情况下,它们显然需要具有不同的名称。

然后,您通过询问以下代码为什么不起作用来跟进该问题:

$result = mssql_query("SELECT Price FROM Extras WHERE ExtraID = '4' ");
$colourresult = mssql_query("SELECT ColourID FROM Colours WHERE Type = '8' ");

while ($row = mssql_fetch_array($result, $colourresult)) { 
     ....
}

原因是该_fetch_array()函数一次只能处理一组结果。您需要为它们中的每一个获取一个单独的行数组。

目前尚不清楚您要对这两个查询执行什么操作,以及为什么要将它们按照您所展示的方式一起放入同一个循环中。

我将假设这两个查询以某种方式链接在一起,这样您就可以像这样一起使用它们?也许您正在加载的 Extra 项目具有已知的颜色;即,您知道编号为 4 的额外项目是用编号为 8 的颜色着色的吗?

通常不会用这些知识编写程序。这将是数据的一部分。因此,在 Extras 表中,您将有一个 ColourID 字段,其中包含值 8。程序将加载 Extras 记录,查看 ColourID 已设置,然后根据它看到的内容加载匹配的 Colors 记录。

因此,您的代码可能如下所示:

$result = mssql_query("SELECT Price FROM Extras WHERE ExtraID = '4' ");

while ($row = mssql_fetch_array($result)) { 
    $colourresult = mssql_query("SELECT ColourID FROM Colours WHERE Type = '".$row['colourID']."' ");
    while ($row2 = mssql_fetch_array($result)) { 
        ....
    }
}

在内部循环中,您可以分别使用或while访问任一查询中的字段(同样,您可以根据需要命名这些字段)。$row$row2

然而,这并不是故事的结局,因为 SQL 实际上有能力将这两个查询合并为一个,而不需要所有的 PHP 代码,使用一种叫做 SQL 的东西JOIN

现在我们可以编写一个更复杂的查询,但回到更简单的 PHP 代码:

$result = mssql_query("SELECT Extras.Price, Colours.ColourName FROM Extras WHERE ExtraID = '4' INNER JOIN Colours ON Colours.ColourID = Extras.ColourID");

while ($row = mssql_fetch_array($result)) { 
     ....
}

如果你是 PH​​P 和 SQL 的初学者,这些概念对你来说可能都是新的,所以我建议尝试它们,试验它们,最重要的是,在继续深入之前阅读一些关于它们的(高质量的)教程。

希望有帮助。:)

(PS:正如我上面所说,确保你正在阅读好的教程;提防糟糕的 PHP 示例和教学网站——那里有很多,教授糟糕的代码和过时的技术;确保你正在阅读一些有价值的东西. 一个好的起点可能是http://phpmaster.com/ )

于 2012-10-12T13:25:24.910 回答
0

这是因为 mssql_fetch_array 只能获取一个结果集。所以删除 $result 并留下 $colourresult 应该适合你。

请参阅: http: //php.net/manual/en/function.mssql-fetch-array.php

于 2012-10-12T12:41:54.193 回答
0

您的变量 ($...) 可以随心所欲地调用,通常最好以您可以理解的方式命名它们,因此 PHP 手册中的大多数示例都包含变量,如 $row、$result、$query、等等

就您的数据库查询而言,您只能将一个查询传递给 mssql_query 方法。如果您需要显示来自不同表的数据,您应该尽可能使用 SQL 尝试连接这些表,而不是遍历多个结果集。

于 2012-10-12T12:50:52.047 回答