首先也是最重要的,
这样的函数应该支持准备好的语句
否则会非常不安全。
此外,这样的函数不应该单独连接,而是接受现有的连接变量作为参数。
鉴于以上所有情况,调用此类函数的唯一可接受的方式是
$name = getVal($mysqli, $query, [$param1, $param2]);
允许$query
仅包含占位符,而实际数据必须单独添加。绝不应使用任何其他变体,包括此处发布的所有其他答案。
function getVal($mysqli, $sql, $values = array())
{
$stm = $mysqli->prepare($sql);
if ($values)
{
$types = str_repeat("s", count($values));
$stm->bind_param($types, ...$values);
}
$stm->execute();
$stm->bind_result($ret);
$stm->fetch();
return $ret;
}
像这样使用哪个
$name = getVal("SELECT name FROM users WHERE id = ?", [$id]);
这是调用此类函数的唯一正确且安全的方法,而所有其他变体都缺乏安全性,而且通常缺乏可读性。