我要做的就是从此函数获取名字结果,但是感觉太多的代码无法基于会话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?
答案 0 :(得分:2)
要使用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,它将被抽象为一行代码。
实际上,在所有情况下,您都希望进行一些错误检查,不考虑返回记录等。此外,您还应避免使用全局变量,因为它们的格式很差。将您的代码放入类中,或者像我刚才那样使用依赖项注入。