我在MySQL数据库中有一个名为'location'的字段 - 它只提供北,南,东,西。
我已使用此代码仅获得4个截然不同的结果:
$query_form = "SELECT DISTINCT location FROM hotel ORDER BY location ASC";
$result_form = mysqli_query($dbc, $query_form) or die('die query error');
$row_form = mysql_fetch_array($result_form, MYSQLI_NUM);
我想使用此查询的四个结果填充表格,以便:
<option value='1'>North</option>
<option value='2'>South</option>
<option value='3'>East</option>
<option value='4'>West</option>
我用过这个:
foreach ($row_form['location'] as $k => $v) {
echo '<option value="' . $k . '">' . $v . '</option>\n';
}
但是我担心我的方法不起作用 - 遗憾的是,我是一个菜鸟,无法弄清楚出了什么问题!
由于
答案 0 :(得分:2)
mysql_fetch_array
只会(引用手册,强调我的):
获取结果行作为 关联数组,数字数组或 两个
所以,你必须多次调用这个函数 - 实际上,每行一次(所以,这里,4次)。
这通常是通过循环完成的,在获得结果时循环。
在您的情况下,您可能希望使用如下所示的内容:
$lineCounter = 1;
while ($row = mysql_fetch_array($result_form, MYSQL_ASSOC)) {
// Use your row, here.
// For instance : $row['location']
// And you can use the $lineCounter variable, to keep track of the current line number.
$lineCounter++;
}
注意:
MYSQL_ASSOC
来获取每行的关联数组:我认为这样更容易。while
循环的正文中,您可以使用按列名索引的$row
关联数组。
作为旁注,当在某些HTML代码中注入数据(例如字符串)时,您应该正确地转义输出,以避免HTML注入。
有关解决方案,请参阅htmlspecialchars
函数。
答案 1 :(得分:0)
MYSQLI_NUM实际上返回带有数字索引的字段。根据您的要求,我相信,它不会真正有助于<option value="x">..
[查看此链接,了解MYSQLI_NUM实际上做了什么:MYSQLI_NUM是什么意思和做什么?
现在,在您的代码中,您需要修改如下:
$i=1;
while ($row_form=mysql_fetch_array($result_form, MYSQLI_NUM)) {
echo '<option value="' . $i . '">' . $row_form['location'] . '</option>\n';
$i++;
}
编辑:正如这里的另一个答案所指出的,你真的需要一个循环结构来从数据库中检索每一行。一个mysql_fetch_array(..)
只会给你一行。您需要循环迭代,直到函数返回有效行。
检查该功能的工作原理:http://php.net/manual/en/function.mysql-fetch-array.php