从mysql数据库获取多维数组

时间:2014-09-17 21:30:36

标签: php oop mysqli prepared-statement

现在我正在使用Mysqli从Mysql数据库中检索数据,使用的代码很难理解,而且根据我的理解,折旧函数或整个本身都是折旧的。 如果我可以从我的Qoal中获取一些洞察力和一些更新的技术,从mysql数据库中检索数据。

mysqli prepared statements

到目前为止我所拥有的是:

$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);
}

1 个答案:

答案 0 :(得分:2)

您需要先清理数据库上的调用。 $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返回一个新对象,您应该将值绑定到然后执行。它避免了SQL injection

这些都不是折旧的。 mysqli_正是您应该使用的。

您只需要一个结果数组,您可以使用以下代码执行此操作 - 无需用户功能。

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
        $set[] = $row['reply_id'];
}

对于while中的每一行,每个字段都保存到一个数组中,列名为键。因此$row['reply_id']包含数据库中reply_id列的值。上面我已将此值保存到名为$set的数组中,当它循环到下一个结果行时,它也将下一个值保存到该数组中。

您可以根据需要在保存到新数组之前或之后操作结果。

希望这有帮助。