2 回答
TA贡献1943条经验 获得超7个赞
猜测参数类型总是有味道。而将所有参数设置为“s”在大多数情况下都可以正常工作。
所以让我建议你另一种解决方案。使类型显式但可选。默认情况下它将是“s”,但可以手动定义类型,就像我在mysqli 辅助函数中所做的那样:
function prepared_query($mysqli, $sql, $params, $types = "")
{
$types = $types ?: str_repeat("s", count($params));
$stmt = $mysqli->prepare($sql);
$stmt->bind_param($types, ...$params);
$stmt->execute();
return $stmt;
}
当您不需要任何特定类型时(大部分时间),只需将它们排除在外:
$sql = "SELECT * FROM tmp_mysqli_helper_test WHERE id > ?";
$res = prepared_query($conn, $sql, [1])->get_result();
但是每次你需要它的时候,它已经在这里并且是明确的,所以你可以设置你想要的确切类型:
$sql = "SELECT * FROM tmp_mysqli_helper_test WHERE id > ?";
$res = prepared_query($conn, $sql, [1], "i")->get_result();
简单、干净、简洁
TA贡献1835条经验 获得超7个赞
您的代码不应该尝试猜测类型。您应该将所有内容绑定为字符串。99.99% 的时间它不会有任何区别。在某些边缘情况下,实际类型会有所不同,但在这些情况下,您可以在知道类型应该是什么时对类型进行硬编码。如果您猜测类型,那么您只会给您的软件添加更多错误。
您从 HTML 表单收到的所有数据都是字符串类型。MySQL 根据上下文动态地进行类型转换。为什么要费心在 PHP 中转换值?只需将所有内容原封不动地发送给 MySQL,让它决定类型应该是什么。
- 2 回答
- 0 关注
- 86 浏览
添加回答
举报