Исходная функция неверна на многих уровнях. И нет смысла воссоздавать его функциональность.
В основном все, на что вы торгуетесь, это всего лишь несколько SQL ключевых слов. Но эти ключевые слова способствуют читаемости .
Почему-то вы решили перехитрить несколько поколений программистов, которые очень довольны синтаксисом SQL, и сделать нечитабельными гиббери sh
$row = selectonerow("some, foo, bar", "baz", "id", [$uniquevalue]);
вместо почти естественного Engli sh
$row = selectonerow("SELECT some, foo, bar FROM baz WHERE id=?", [$uniquevalue]);
Давай. Это не стоит.
Сделайте так, чтобы ваша функция принимала обычный запрос SQL, а не ограниченный неразборчивый беспорядок.
function selectonerow(mysqli $conn, string $sql, array $params = []): array
{
if ($params) {
$stmt = $conn->prepare($sql);
$stmt = $mysqli->prepare($sql);
$stmt->bind_param(str_repeat("s", count($params), ...$params);
$stmt->execute();
$result = $stmt->get_result()
} else {
$result = $conn->query($sql);
}
return $result->fetch_assoc();
}
Эта функция позволит вам использовать любой запрос. Например, нужна строка с максимальной ценой?
$row = selectonerow("SELECT * FROM baz ORDER BY price DESC LIMIT 1");
Нужно более сложное условие? Нет проблем
$sql = "SELECT * FROM baz WHERE email=? AND activated > ?";
$row = selectonerow($sql, [$email, $date]);
и так далее. Любой SQL. Любое условие.