为了账号安全,请及时绑定邮箱和手机立即绑定

我们应该在哪里使用 fetch_assoc 方法?

我们应该在哪里使用 fetch_assoc 方法?

PHP
手掌心 2023-07-08 22:08:37
我开始了这个小博客项目,我认为我犯了一个错误,因为没有包含fetch_assoc方法。这是代码:$data = new database();$sql = "SELECT * FROM post "; $article = $data->select($sql); foreach ($article as  $value) : ?> <div class="blog-post"><h2 class="blog-post-title"><?= $value["blog_title"]; ?></h2>这就是 select 方法的样子:public function select($sql){     $result = $this->con->query($sql) or die($this->con->error.__LINE__);     if ($result->num_rows > 0) {        return $result;     }else {       return false;     }}我想知道为什么它对我有用(博客的标题显示正确),尽管我忘记了方法fetch_assoc?
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

fetch_assoc()大部分时间你不需要使用。如果您正在围绕 mysqli 编写某种抽象类,那么您永远不需要直接使用任何 mysqli 函数。

mysqli:query()返回一个mysqli_result可迭代类型的对象。这意味着您可以使用foreach循环来迭代它。

我需要指出的是,您仍然遵循一些不良的编程实践。你永远不应该使用or die($this->con->error.__LINE__). 这是一种糟糕的编码实践,而且完全没有必要。相反,您应该启用正确的错误报告。

您的select()方法应该只返回一个数组。这将使您的代码更加简单并且不易出错。因此,将您的select()函数重写为:

public function select($sql){
    return $this->con->query($sql)->fetch_all(MYSQLI_ASSOC);
}

正如您所看到的,整个功能是一行代码,这意味着您的select()方法不是很有用。您可以用更通用的东西替换它。这样你就可以避免大量的代码重复。

public function executeQuery(string $sql, array $params = []): ?array {

    // Prepare/bind/execute

    $stmt = $this->con->prepare($sql);

    if ($params) {

        $stmt->bind_param(str_repeat("s", count($params)), ...$params);

    }

    $stmt->execute();

    // If it was a select query which gives result then return results in an array

    if ($result = $stmt->get_result()) {

        return $result->fetch_all(MYSQLI_BOTH);

    }

    // If it is INSERT/UPDATE then return null instead of array

    return null;

}

当然,这个方法不应该是你的模型的一部分。它应该是数据库通信专用类的一部分。然后,您可以在应用程序中创建它的单个实例并将其传递给您的模型。


查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 397 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信