0

我想创建一个简单的选择下拉列表,由我的 MYSQL 数据库中的表填充。这是我的代码:

$q = 'SELECT * FROM Shipmethods';
$result = mysqli_query($connection, $q);

echo '<select name="shipmethod">';

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)); 
{   
    echo '<option value="' . $row['shipmethodid'] . '">' . $row['shipmethoddesc'] . '</option>';
}

echo '</select>';

mysqli_free_result($result); // free up the results

}

没有连接错误,表名或列名没有拼写错误。HTML 输出显示存在一个选择选项,但它是空的。我想为此使用mysqli。

关于这个主题似乎已经有无数的主题,但据我所知,我的代码与那些已经回答的问题的正确答案相匹配。

提前致谢。

4

2 回答 2

5

;从这一行中删除,其余代码对我来说似乎很好,让我知道它是否有效 -

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)); 

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
于 2012-12-22T04:04:49.673 回答
0

首先,根据我们掌握的证据,除了空结果集之外,最有可能的问题是 swapnesh 发现的问题,这显然是一个逻辑错误。我提供了这个插图,它模拟了这个问题,以明确说明这里意外完成的事情不是语法错误。错位的分号实质上导致只有在 while 循环耗尽后才能进入以下块。

考虑这个例子:

<?php

$r = array(1,2,3,4);

function fetchit(&$r) {
    return array_pop($r);
}


while ($val = fetchit($r))
{
    echo $val;
} 

这将是预期用途。现在如果脚本有这个代码会发生什么?

<?php

$r = array(1,2,3,4);

function fetchit(&$r) {
    return array_pop($r);
}


while ($val = fetchit($r));
{
    echo $val;
}

尝试这些,您将看到两个脚本都运行没有错误。虽然没有必要,但 php 并不关心您是否在脚本 {} 中的某处随机包含一个不需要的块,它也不关心 if、while、for 等是否后面跟着一个块。事实上,人们用以下方式缩短代码是一种常见的做法:

if (//somecondition)
    statement;

许多人不赞成这种做法,但它是合法的,程序员一直在使用它。

于 2012-12-22T04:30:50.063 回答