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

时间:2012-10-16 14:30:07

标签: php variables

我有一个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 个答案:

答案 0 :(得分: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)) {

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

你的代码看起来很不错,但你犯了逻辑错误 - 如果没有更多数据要分配给你的while,你就会$toughresult循环结束。因此,一旦循环结束,$toughresult不包含任何可用数据:

  

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

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

为避免将来出现此类问题,请务必确保检查手册中是否有可能的返回值,并确保代码正确处理,包括。边缘情况。

答案 3 :(得分:1)

undefined表示未初始化使用的变量。如果代码永远不会通过您的第二个$toughprice循环,那么$standardpricewhile就是如此。这可以从页面上呈现的html中看出来,因为不应该创建动态创建的html(在这种情况下为td)。

从您的代码中可以看出:

  1. 第一个查询不会返回任何结果或
  2. 第一个查询确实返回了一些结果,但第二个查询没有。
  3. 然后调试这些查询以查看错误。

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