我可以对 bind_param() 类型中的所有值使用字符串 ("sss...") 吗?如果没有,为什么不呢?
Can I use string ("sss...") for all the values in bind_param() type? If no, why not?
我正在我的 class 中创建一个方法,该方法的参数是 $sql, $types, $values
.
function getResult($sql, $types, $values){
$stmt = $this->conn->prepare($sql);
$stmt->bind_param( "$types" , ...$values);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
return $result;
} else{
return "There is no such row";
}
}
但我想知道,也许我可以创建一个函数,其中 $types
是根据 $values
的计数自动生成的,并给它一个字符串 ("s"
)。像这样:
function getResult($sql, $values){
$stmt = $this->conn->prepare($sql);
$types = str_repeat("s", count($values));
$stmt->bind_param( $types, ...$values);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
return $result;
} else{
return "There is no such row";
}
}
这是不好的做法吗?它会使代码更小
是的,您绝对可以使用字符串来绑定每个参数。将参数绑定为字符串在 99.99% 的情况下都有效。在 MySQL 中只有少数情况参数的类型很重要。
您可以做的是创建一个将 $types
作为可选参数的函数。这将是最佳实践,因为如果您真的需要它们,它可以让您选择指定类型。
function getResult(string $sql, array $values, ?string $types = null): ?mysqli_result
{
$stmt = $this->conn->prepare($sql);
if (is_null($types)) {
$types = str_repeat("s", count($values));
}
$stmt->bind_param($types, ...$values);
$stmt->execute();
return $stmt->get_result() ?: null;
}
P.S。让函数 return 有两种类型的值是个坏主意。键入提示您的函数并坚持使用单一类型。
我正在我的 class 中创建一个方法,该方法的参数是 $sql, $types, $values
.
function getResult($sql, $types, $values){
$stmt = $this->conn->prepare($sql);
$stmt->bind_param( "$types" , ...$values);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
return $result;
} else{
return "There is no such row";
}
}
但我想知道,也许我可以创建一个函数,其中 $types
是根据 $values
的计数自动生成的,并给它一个字符串 ("s"
)。像这样:
function getResult($sql, $values){
$stmt = $this->conn->prepare($sql);
$types = str_repeat("s", count($values));
$stmt->bind_param( $types, ...$values);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
return $result;
} else{
return "There is no such row";
}
}
这是不好的做法吗?它会使代码更小
是的,您绝对可以使用字符串来绑定每个参数。将参数绑定为字符串在 99.99% 的情况下都有效。在 MySQL 中只有少数情况参数的类型很重要。
您可以做的是创建一个将 $types
作为可选参数的函数。这将是最佳实践,因为如果您真的需要它们,它可以让您选择指定类型。
function getResult(string $sql, array $values, ?string $types = null): ?mysqli_result
{
$stmt = $this->conn->prepare($sql);
if (is_null($types)) {
$types = str_repeat("s", count($values));
}
$stmt->bind_param($types, ...$values);
$stmt->execute();
return $stmt->get_result() ?: null;
}
P.S。让函数 return 有两种类型的值是个坏主意。键入提示您的函数并坚持使用单一类型。