返回单个数据库结果的正确方法是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回单个数据库结果的正确方法是什么?相关的知识,希望对你有一定的参考价值。

我想要做的就是从这个函数中获取firstname结果,但是根据会话ID,它感觉代码太多了。

//query_functions.php

function find_name_by_id($id) {
    global $db;

    $sql = "SELECT firstname FROM admins ";
    $sql .= "WHERE id='" . db_escape($db, $id) . "' ";
    $sql .= "LIMIT 1";
    $result = mysqli_query($db, $sql);
    confirm_result_set($result);
    $name = mysqli_fetch_assoc($result); // find first
    mysqli_free_result($result);
    return $name; // returns an assoc. array
  }

// admin.php

id = $_SESSION['admin_id'];
$name = find_name_by_id($id);

// what is the shortest way to get this $name result?
答案

要使用prepared statements正确地执行此操作,您实际上需要更多代码:

function find_name_by_id($db, $id) {
    $stmt = $db->prepare("SELECT firstname FROM admins WHERE id=?");
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    $stmt->free_result();
    return $row[0];
}

我不确定confirm_result_set是什么,所以我把它留了出来。

让我们假装$db是一个PDO对象:

function find_name_by_id($db, $id) {
    $stmt = $db->prepare("SELECT firstname FROM admins WHERE id=?");
    $stmt->execute([$id]);
    return $stmt->fetchColumn();
}

涉及的代码少得多。对于更高级别的API,这将被抽象为一行代码。

实际上,对于所有情况,您都希望进行一些错误检查,不记录任何记录,等等。此外,您应该避免全局变量,它们的形式非常差。把你的代码放到一个类中,或者只是像我一样使用依赖注入。

以上是关于返回单个数据库结果的正确方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章

为啥此代码片段返回意外结果?

在单个片段事务中添加多个返回堆栈条目

将初始数据提供给片段的正确方法?

将初始数据提供给片段的正确方法?

声称子查询只能返回单个列

如何在按下单个片段的手动后退按钮时返回上一个片段?