Все, что я хочу сделать, это получить результат имени из этой функции, но он чувствует, что это слишком много кода, чтобы сделать это на основе идентификатора сеанса.
//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?
Чтобы сделать это правильно, используя подготовленные операторы, вам действительно нужно больше кода:
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
, поэтому я не 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 более высокого уровня это будет абстрагировано в одну строку кода.
В действительности, во всех случаях вы хотели бы выполнить некоторую проверку ошибок, учесть отсутствие возвращаемых записей и т.д. Также следует избегать глобальных переменных, они очень плохой формы. Поместите свой код в класс или просто используйте внедрение зависимостей, как я сделал.