Php 从mysql数据库获取多维数组

Php 从mysql数据库获取多维数组,php,oop,mysqli,prepared-statement,Php,Oop,Mysqli,Prepared Statement,现在我用它从一个Mysql数据库中检索数据,我用的代码很难理解,据我所知,它已经贬低了函数或它本身的价值。 如果我能对从mysql数据库检索数据的Qoal有一些了解,也许还有一些更新的技术 到目前为止,我得到的是: $param = 1; $mysqli = new mysqli("127.0.0.1", "user", "password", "databaseName"); $mysqli->query('SELECT reply_id FROM replies WHERE repl

现在我用它从一个Mysql数据库中检索数据,我用的代码很难理解,据我所知,它已经贬低了函数或它本身的价值。 如果我能对从mysql数据库检索数据的Qoal有一些了解,也许还有一些更新的技术

到目前为止,我得到的是:

$param = 1;
$mysqli = new mysqli("127.0.0.1", "user", "password", "databaseName");
$mysqli->query('SELECT reply_id FROM replies WHERE reply_topic = ? ORDER BY reply_date ASC');
$mysqli->bind_param('i',$param)
$mysqli->execute();
$row = bind_result_array($mysqli);

while($mysqli->fetch()){
    $set[$row['']] = getCopy($row);
}
$mysqli->free_result();
return $set;




function bind_result_array($stmt)
{
    $meta = $stmt->result_metadata();
    $result = array();
    while ($field = $meta->fetch_field())
    {
        $result[$field->name] = NULL;
        $params[] = &$result[$field->name];
    }

    call_user_func_array(array($stmt, 'bind_result'), $params);
    return $result;
}

function getCopy($row)
{
    return array_map(create_function('$a', 'return $a;'), $row);
}

您需要首先清除对数据库的调用
$mysqli->query
已在绑定参数之前发送查询,等等

替换为以下内容:

$stmt = $mysqli->prepare('SELECT reply_id FROM replies WHERE reply_topic = ? ORDER BY reply_date ASC');
$stmt->bind_param('i',$param)
$stmt->execute();
$mysqli->prepare
返回一个新对象,您应该将值绑定到该对象,然后执行它。它避免了

所有这些都没有贬值
mysqli\uuz
正是您应该使用的

由于您只需要一个结果数组,所以可以使用以下代码来完成此操作—不需要用户函数

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
        $set[] = $row['reply_id'];
}
对于
while
中的每一行,每个字段都以列名作为键保存到一个数组中。因此,
$row['reply\u id']
包含数据库中
reply\u id
列的值。上面我已经将这个值保存到一个名为
$set
的数组中,当它在下一个结果行上循环时,它也将下一个值保存到该数组中

您可以在将结果保存到新数组之前或之后操纵结果,如您所见


希望这能有所帮助。

从这一点开始,就可以清楚地了解mysqli。mysql和mysqli之间的唯一区别是更好地使用$connection。我们使用mysqli_query($connection,$query)代替mysql_query($query),并使用类似的mysqli_fetch_数组($connection,$result)。不要信任w3schools。真正的问题是,为什么要以这种人为的方式填充变量
$set
?你以后用它做什么?从数据库读取数据应该比这个简单得多。@developerwjk$set返回一个多维数组,每返回一行一个数组。我在很多教程中都看到过这种情况,真的不知道如何才能得到我想要的。我发布了一个答案,但我发现有几点是错误的,所以我删除了它。我建议换成PDO。弄清楚如何用mysqli实现这一点似乎过于复杂了。您的查询结果是一个类似于二维数组的表类型数据结构。您可能正在寻找的是一个“透视表”——一个既有行标题又有列标题的表。有人告诉我create_函数已折旧,不应使用。但是getrow()方法是我在教程中看到的唯一方法。啊,我错过了。您可以只使用
函数($a){return$a;}
,因为这将在PHP5.2+aw中起作用。一些thx将把它输入到我的代码中。欣赏它。你能解释一下While循环到底在做什么吗,我正在模糊它是如何实现目标的。简单地说,对于结果的每一行,用绑定变量(或者你的例子中的数组)来做这件事。