而在另一个内部声明

时间:2011-06-18 06:26:11

标签: php mysql

。我有以下代码。我想知道为什么我的“echo '<font color="#FF0000">'.$update_date2.'</font><br><br>'.$status.'<br>';”没有显示在屏幕上?

。可以在另一个while语句中使用while语句吗?如下面的代码所示。

<?php
$getquery = mysql_query("SELECT * FROM it_task ORDER BY task_id DESC");
while ($rows = mysql_fetch_array($getquery))
{
    $id= $rows['task_id'];
    $date=$rows['date'];
    $update_date = $rows['update_date'];
    $project=$rows['project'];
    $topic=$rows['topic'];
    $instby=$rows['instby'];
    $inst=$rows['inst'];
    $dline=$rows['dline'];
    $ocome=$rows['ocome'];
    $comm=$rows['comm'];
    $fin=$rows['fin'];
    echo "<div id=\"container\">";
    echo "<table>";
    echo "<tr>";
    echo "<div id=\"conid\">$id</div>";
    echo "<div id=\"condate\">$date</div>";
    echo "<div id=\"conproject\">$project</div>";
    echo "<div id=\"contask\">$topic</div>";
    echo "<div id=\"conselect\">$instby</div>";
    echo "<div id=\"conselect1\">$inst</div>";
    echo "<div id=\"condline\">$dline</div>";
    echo "<div id=\"conocome\">";
    $updatesquery = "SELECT * FROM it_task_update WHERE update_id=$id";
    while($rows1 = mysql_fetch_array($updatesquery));
    {
        $update_date2 = $rows1['update_date'];
        $status = $rows1['ocome'];
        $update_id = $rows1['update_id'];
        echo '<font color="#FF0000">'.$update_date2.'</font><br><br>'.$status.'<br>';
    }
    echo "</div>";
    echo "<div id=\"concomm\">$comm</div>";
    echo "<div id=\"confin\">$fin</div>";
    echo "</tr>";
    echo "</table>";
    echo "</div>";
}
?>

。我在这组代码中做错了。任何人都可以指导我。 TIA!更多力量! :)

5 个答案:

答案 0 :(得分:2)

你有SELECT * FROM it_task_update WHERE update_id = $id的结果吗?

尝试

print_r($rows1); before line $update_date2 = $rows1['update_date'];

并查看结果。

答案 1 :(得分:2)

$updatesquery = "SELECT * FROM it_task_update WHERE update_id=$id";
     <---dude, where's my query?
while($rows1 = mysql_fetch_assoc($updatesquery));

您实际上并未执行查询。您正在尝试对字符串执行提取,这是MySQL中的错误条件,导致提取调用返回FALSE,这使得while()循环立即终止..

换句话说,你在这些行之间错过了对mysql_query()的调用。

另一方面,如果内循环将要执行“很多次”,你应该考虑将两个查询重新组合成一个带有JOIN子句的查询。几乎总是在执行一个大型查询然后运行多个较小的查询之后。

答案 2 :(得分:1)

您正在尝试从您从未执行过的查询中检索处理查询的结果。请注意,在开始循环结果之前,您调用了mysql_query。然后请注意,您尝试从内部while循环中从未执行的查询开始获取结果。

答案 3 :(得分:1)

是的,可以在另一个循环中使用一段时间或其他类型的循环,因为它取决于您的业务逻辑。但是,您忘记在while循环之前执行第二个查询。如果您使用INNER JOIN或其他内容执行此操作会更好,这样您就不会浪费资源。

另外,我建议你不要用echo打印出DOM元素,但要像这样<div id="username">Username: <?php echo $username; ?></div>。但是,即使在您的情况下,也可以保持代码清洁。这是我的建议:

<?php
$getquery = mysql_query("SELECT * FROM it_task ORDER BY task_id DESC");
while ($rows = mysql_fetch_array($getquery))
{
    $id= $rows['task_id'];
    $date=$rows['date'];
    $update_date = $rows['update_date'];
    $project=$rows['project'];
    $topic=$rows['topic'];
    $instby=$rows['instby'];
    $inst=$rows['inst'];
    $dline=$rows['dline'];
    $ocome=$rows['ocome'];
    $comm=$rows['comm'];
    $fin=$rows['fin'];
    echo '<div id="container\">'.
            '<table>'.
                '<tr>'.
                    "<div id=\"conid\">$id</div>".
                    "<div id=\"condate\">$date</div>".
                    "<div id=\"conproject\">$project</div>".
                    "<div id=\"contask\">$topic</div>".
                    "<div id=\"conselect\">$instby</div>".
                    "<div id=\"conselect1\">$inst</div>".
                    "<div id=\"condline\">$dline</div>".
                    "<div id=\"conocome\">";

    $updatesquery = "SELECT * FROM it_task_update WHERE update_id=$id";
    // you need to execute the query
    $updatesresult = mysql_query($updatesquery);
    while($rows1 = mysql_fetch_assoc($updatesresult)) // <-- no semicolon here
    {
        $update_date2 = $rows1['update_date'];
        $status = $rows1['ocome'];
        $update_id = $rows1['update_id'];
        echo '<font color="#FF0000">'.$update_date2.'</font><br><br>'.$status.'<br>';
    }
    echo            '</div>'.
                    "<div id=\"concomm\">$comm</div>".
                    "<div id=\"confin\">$fin</div>".
                '</tr>'.
            '</table>'.
        '</div>';
}
?>

更新

你的内部while语句不应该以逻辑点的分号结束。请检查上面的代码,看看我为您发表评论的位置。

答案 4 :(得分:1)

内部后面有分号

while($rows1 = mysql_fetch_assoc($updatesquery));
{
 // stuff
}

应该是

while($rows1 = mysql_fetch_assoc($updatesquery))
{
 // stuff
}