php - 如何根据检索到的列类型动态地将正确的类型分配给bind_param?

标签 php sql mysqli

背景信息:

我正在创建一个类来为我处理某些查询。这些查询之一是 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/

相关文章:

php - 拆分 MySQL 结果数组以输出总和和类别标题

java - Android、PHP 和 UTF-8 问题

sql - NoSQL 是这个特定数据库问题的最佳选择吗

php - MySQL:<>1 有效但 =0 无效

php - $_POST 未正确传递到 mysqli 查询(没有错误,我看到我的值通过但不会绑定(bind))

php - 聪明的将字符串转换为数字

php - 无法在 mPDF 中添加图像

SQL Server 2016 比 2008 慢

mysql - 在多行中选择过去两年

php - mysqli 在查询中添加了空值