【问题标题】:Confusion with mysqli_fetch_array与 mysqli_fetch_array 混淆
【发布时间】:2013-10-12 01:47:42
【问题描述】:

我不熟悉 mysqli_fetch_array 并且似乎无法弄清楚这一点。我有以下代码:

function select_fetch_row ($arg1, $arg2) {
    $con = new mysqli(/* ... */);
    $query = "SELECT $arg1 FROM $arg2";
    $select = mysqli_query($con, $query);
    while($row = mysqli_fetch_array($select, MYSQLI_NUM)){
        echo $row[0];
    }

}

select_fetch_row(/* parameters*/);

但是我不明白它应该做什么。我期望获得一个数组,其中每个键对应于我的表中的一行,但是当我输出我的代码时,而不是仅仅回显第一行的值 ($row[0]),列的所有值都会得到回响。有人能解释一下这个函数是如何工作的吗?

【问题讨论】:

  • 在调用时是否向函数发送任何参数?似乎并非如此。这些参数是正确构建查询所必需的
  • 不要使用字符串连接来编写查询。使用bind_param 方法。
  • @Hanky웃Panky 我忘记在上面的示例中添加它们,但在我的代码中我做到了。将在上面进行编辑,感谢您指出这一点。
  • @tadman:您如何将动态表名放入查询中而不进行连接?您将如何在不连接的情况下动态改变查询 WHERE 条件?
  • mysqli 不是最好的系统,PDO 提供了更多的灵活性,但是是的,表名和列名总是很麻烦。如果您输入任意用户数据,您应该将这些内容列入白名单以避免各种伤害。至少这些应该被赋予正确的名称并转义:SELECT `$column` FROM `$table` 会使其更加清晰。

标签: php mysql


【解决方案1】:
while($row = mysqli_fetch_array($select, MYSQLI_NUM)){
        echo $row[0];
    }

您正在逐一获取行,不是在单个数组中。因此,每个 $row 变量在表中都有一行,每个键都包含一个列值。因此,当您回显 $row[0] 时,您将显示您返回的行的第一列。

如果您将参数 MYSQLI_NUM 更改为 MYSQLI_ASSOC,您将更好地了解发生了什么(数组键将包含列名而不是整数)。

如果你想一次性获取所有行,你可以使用 mysqli_fetch_all 代替,它会给你一个大数组,每个键包含一行。

http://www.php.net/manual/en/mysqli-result.fetch-array.php

http://www.php.net/manual/en/mysqli-result.fetch-all.php

【讨论】:

    猜你喜欢
    • 2014-07-09
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多