Php 与mysqli_fetch_数组混淆

Php 与mysqli_fetch_数组混淆,php,mysql,Php,Mysql,我不熟悉mysqli_fetch_数组,似乎无法理解这一点。我有以下代码: 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_N

我不熟悉mysqli_fetch_数组,似乎无法理解这一点。我有以下代码:

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]
),而是回显列的所有值。有人能解释一下这个函数是如何工作的吗

while($row = mysqli_fetch_array($select, MYSQLI_NUM)){
        echo $row[0];
    }
您正在逐个获取行,而不是在单个数组中。因此,每个$row变量都有一个表中的行,每个键都包含一个列值。因此,当您回显$row[0]时,将显示返回的行的第一列

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

如果希望一次性获取所有行,可以使用mysqli_fetch_all,这将为您提供一个大数组,每个键包含一行


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