使用while时PHP中的MySql_fetch_array()错误

时间:2012-08-02 02:56:01

标签: php mysql loops while-loop

好的,这是我的代码:

$select_status = 0;
$select_status = "<select name='status'>\n";
$select_status .= "<option value=''>SELECT ONE</option>\n";
$sdataset = mysql_query("SELECT id, name FROM phponly_category") or die(mysql_error());

while($srow=mysql_fetch_assoc($sdataset)) {
    echo implode(", ", $srow);
    echo "<br />";

    $select_status .= "<option value='".$srow['name']."'";
    $select_status .= ">".$srow['name']."</option>\n";


} // end while loop
echo "out of the loop";
$select_status .= "</select>\n";
// now insert the <select> list control into the page
echo $select_status;

代码工作正常,直到它破坏的最后一行。我无法打印 echo $ select_status 。 我试图通过打印每一行来查看SQL查询结果发生了什么但是一切看起来都很好。出于某种原因,在最后一行 while循环中断,甚至 while循环之后的代码也没有被执行。

3 个答案:

答案 0 :(得分:1)

当您读取结果集的末尾时,while()循环上的or die()实际上将终止该脚本。 mysql_fetch将返回false,触发or die()

虽然在查询时检查错误是好的,但你不能在提取部分这样做,因为你会得到这样的误报。

答案 1 :(得分:0)

使用mysql_fetch_assoc,以便您可以使用字段名称作为密钥来获取数据。

<?php

$conn = mysql_connect('localhost', 'username', 'password');
mysql_select_db('test');

$select_status = "<select name='status'>\n";
$select_status .= "<option value=''>SELECT ONE</option>\n";
$sdataset = mysql_query("SELECT id, name FROM phponly_category") or die(mysql_error());

while($srow=mysql_fetch_assoc($sdataset)) {
    $select_status .= "<option value='".$srow['name']."'".">".$srow['name']."</option>\n";

} // end while loop

$select_status .= "</select>\n";
echo $select_status;
?>

注意:不鼓励使用此扩展程序。看看mysqli或PDO。

答案 2 :(得分:0)

我个人不喜欢回复html代码,如果你的目标是验证查询是否有结果,你可以做这样的事情

<?php
    $sdataset = mysql_query("SELECT id, name FROM phponly_category");
    if (mysql_num_rows($sdataset) > 0) {
?>
    <select name='status'>
    <option value=''>SELECT ONE</option>
<?php
    while($srow = mysql_fetch_array($sdataset)) {
?>
    <option value='<?php echo $srow['name'] ?>'><?php echo $srow['name'] ?></option>
<?php } // end while loop ?>
    </select>
<?php
    } // end of if
    else {
        // Whatever you wanna put here
    }
?>

编辑:mysql_num_rows有一个拼写错误,再试一次