背景信息:
我正在创建一个类来为我处理某些查询。这些查询之一是 SELECT 查询,用户可以在其中基于子句选择某些内容。我成功检索了列的类型,但不知道如何根据列的类型实际决定应将哪个类型赋予 bind_param()
(第一个参数)。
我最初的计划是省钱,简单地硬编码如果检索到的列类型是某种类型,应该给出哪个参数。
我最初想法的示例:
if ($type === "varchar") {
$aVariable = "s";
}
//OR USE A SWITCH, BUT YOU GET THE IDEA
bind_param($aVariable, $someOtherVar);
然而,由于多种不同的原因,这并不是我满意的事情。所以我的问题是:
问题:
如何使用 TYPES 列(如果可能)来确定提供给 bind_param()
的参数是否应该是以下类型之一:“s, i, d, b”,而不必硬编码检索到的类型 = 某个字母。
最佳答案
猜测参数类型总是很糟糕。而将所有参数设置为“s”在大多数情况下都可以完美地工作。
所以让我建议您另一个解决方案。使类型明确,但可选。默认情况下它将是“s”,但可以手动定义类型,就像我在 mysqli helper function 中所做的那样:
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();
简单、干净、简洁
关于php - 如何根据检索到的列类型动态地将正确的类型分配给bind_param?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61956565/