【问题标题】:Creating a form from mysql_fetch_array query从 mysql_fetch_array 查询创建表单
【发布时间】:2011-02-25 16:48:06
【问题描述】:

我在 MySQL 数据库中有一个名为“位置”的字段 - 它只提供北、南、东、西。

我使用这段代码只得到了 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';
    }

但我担心我的方法行不通 - 遗憾的是,我是个菜鸟,无法找出问题所在!

谢谢

【问题讨论】:

  • 使用mysql_fetch_assoc();或改为mysql_fetch_array($result_form, MYSQL_ASSOC);

标签: php mysql forms fetch


【解决方案1】:

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 函数以获取解决方案。

【讨论】:

    【解决方案2】:

    MYSQLI_NUM 实际上返回带有数字索引的字段。根据您的要求,我相信,拥有&lt;option value="x"&gt;..

    [查看此链接了解 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多