在包含查询结果的循环外使用php变量

在包含查询结果的循环外使用php变量,php,variables,Php,Variables,我有一个PHP循环,在循环中包含一个查询,我设置了两个变量来包含某些结果,然后我想使用循环之外的变量。然而,当我这样做时,它们只是作为未定义返回。代码如下: <?php $standardresult = mssql_query("SELECT Price FROM Extras WHERE ExtraID = 5 "); while ($standardrow = mssql_fetch_array($standardresult )) { $toughresult = m

我有一个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; ?>" />


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

在java中,这种方法甚至会出现语法错误,因为这里所做的并不健壮。 在执行最后一个while语句之后,您希望变量中有什么内容?只有通过查询收到的可能条目集中的最后一个条目?
如果不需要多行,则不需要WHILE,只需获取第一个结果。我不知道“限制1”的MSSQL语句,但这也可能有帮助。

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

在java中,这种方法甚至会出现语法错误,因为这里所做的并不健壮。 在执行最后一个while语句之后,您希望变量中有什么内容?只有通过查询收到的可能条目集中的最后一个条目?
如果不需要多行,则不需要WHILE,只需获取第一个结果。我不知道“限制1”的MSSQL语句,但这也可能有帮助。

您的代码看起来很好,但您犯了逻辑错误-您得到了
,而
循环结束了如果tehre没有更多的数据分配给您的
$toughresult
。因此,循环结束后,
$toughresult
不包含任何可用数据:

成功时返回MS SQL结果资源,如果未创建行,则返回TRUE 返回,或错误时为FALSE

所以只要做
var_dump($toughresult)以验证这一点。如果要使用数据,请中断循环或将数据复制到另一个不会被覆盖的变量


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

您的代码看起来很正常,但您犯了逻辑错误-您得到了
,而当
循环结束时,如果没有更多数据分配给
$toughresult
。因此,循环结束后,
$toughresult
不包含任何可用数据:

$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)) {
成功时返回MS SQL结果资源,如果未创建行,则返回TRUE 返回,或错误时为FALSE

所以只要做
var_dump($toughresult)以验证这一点。如果要使用数据,请中断循环或将数据复制到另一个不会被覆盖的变量

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

$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)) {
也许这会有所不同

???我想应该是这样

$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
$standardprice
代码在
循环期间从未通过第二个
循环,则这将适用于您的
$toughprice
$standardprice
。从页面上呈现的html中可以明显看出这一点,因为不应创建动态创建的
html
td
s)

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

  • 第一个查询不返回任何结果或结果
  • 第一个查询确实返回了一些结果,但第二个查询没有
  • 所以,调试这些查询,看看有什么问题

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

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

    例如:

    <?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; ?>" /> 
    

    未定义
    表示使用的变量未初始化。如果您的
    $toughprice
    $standardprice
    代码在
    循环期间从未通过第二个
    循环,则这将适用于您的
    $toughprice
    $standardprice
    。从页面上呈现的html中可以明显看出这一点,因为不应创建动态创建的
    html
    td
    s)

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

  • 第一个查询不返回任何结果或结果
  • 第一个查询确实返回了一些结果,但第二个查询没有
  • 所以,调试这些查询,看看有什么问题

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

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

    例如:

    <?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; ?>" /> 
    

    请正确缩进您的代码…抱歉,尝试缩进,但您已经编辑了它。:/谢谢。请正确缩进您的代码…对不起,tri