1

我有一个 PHP 循环,其中包含循环内的查询我设置了两个变量以包含某些结果,然后我想在循环外使用这些变量。但是,当我这样做时,它们只是返回未定义。代码如下:

<?php 
$standardresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 5 ");

while ($standardrow = mssql_fetch_array($standardresult )) { 
    $toughresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 6 ");

    while ($toughrow = mssql_fetch_array($toughresult)) {
        $toughprice = $toughrow['Price'];
        $standardprice = $standardrow['Price'];
        echo $standardrow['Price'];
        echo $toughrow['Price'];
        ?>

        <td align="center">
            <input type="radio" name="triple" value="yes" onclick="showPrice('<?php echo $standardrow['Price']; ?>','<?php echo $toughrow['Price']; ?>')" /> yes
        </td>
        <td>&nbsp;</td>
        <td align="center">
            <input type="radio" name="triple" value="no" onclick="showPrice('0','0')" checked="checked" /> no
        </td>

        <?php 
    } 
} 
?>

</tr>
</table>

<input type="hidden" name="ToughPrice" value="<?php echo $toughprice; ?>" />
<input type="hidden" name="StanPrice" value="<?php echo $standardprice; ?>" />

有问题的变量是 $toughprice 和 $standardprice。谁能告诉我哪里出错了,或者如果可能的话?感谢您的任何帮助。

4

4 回答 4

3
$standardresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 5 ");
while ($standardrow = mssql_fetch_array($result)) { 

$toughresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 6 ");
while ($toughrow = mssql_fetch_array($result)) {

???我想应该是

$standardresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 5 ");
while ($standardrow = mssql_fetch_array($standardresult)) { 

$toughresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 6 ");
while ($toughrow = mssql_fetch_array($toughresult)) {

也许它会有所作为......

于 2012-10-16T14:37:07.423 回答
1

除了值未定义的标签之外,您还有其他输出吗?如果不是,则您的查询之一没有返回结果,并且您从未在 while 语句之外定义变量。

在 java 中,您甚至会遇到这种方法的语法错误,因为您在这里所做的事情并不可靠。执行完最后的 while 语句后,您对变量的期望是什么?只有您通过查询收到的可能条目集中的最后一个条目?如果您不希望超过一行,则不需要 WHILE,只需获取第一个结果。我不知道“LIMIT 1”的 MSSQL 语句——但这也有帮助。

于 2012-10-16T14:35:53.267 回答
1

您的代码看起来不错,但是您犯了逻辑错误-while如果没有更多数据分配给您的$toughresult. 所以一旦循环结束,$toughresult不包含任何可用数据:

成功时返回 MS SQL 结果资源,如果没有返回行,则返回 TRUE,错误时返回 FALSE。

因此,只需var_dump($toughresult);验证这一点。如果你想使用你的数据,要么打破循环,要么将你的数据复制到另一个不会被覆盖的变量中。

为避免将来出现此类问题,请始终确保您检查手册以获取可能的返回值,并确保您的代码正确处理它,包括。边缘情况。

于 2012-10-16T14:36:07.737 回答
1

undefined表示使用的变量未初始化。如果代码从未通过您的第二个$toughprice循环,那将是正确的 。从页面上呈现的 html 可以明显看出这一点,因为不应创建动态创建的(在本例中为 s )。$standardpricewhilehtmltd

根据您的代码,在以下情况下会出现这种情况:

  1. 第一个查询不返回任何结果或
  2. 第一个查询确实返回了一些结果,但第二个查询没有。

因此,调试这些查询以查看问题所在。

PS:我不确定你为什么使用两个嵌套while循环,内部不需要来自外部的数据。您有两个可以相互独立的静态查询。如果由于某种原因您需要对第一个循环的每个项目进行迭代第二个循环的结果,请在执行数据库查询后执行。现在第二个查询 N 次得到相同的结果(N 是第一个查询的行)

最后,如果由于某种原因没有任何结果是预期的情况,则在循环之前while初始化变量以消除undefined错误

例如:

<?php  
$toughprice = 0; // default value
$standardprice = 0; //default value

... 
while (...) {  
    while (...) { 
        $toughprice = ...        
        $standardprice = ... 
    }
}
...

<input type="hidden" name="ToughPrice" value="<?php echo $toughprice; ?>" /> 
<input type="hidden" name="StanPrice" value="<?php echo $standardprice; ?>" /> 
于 2012-10-16T14:49:13.880 回答