【问题标题】:How to add special condition to bind_param?如何向 bind_param 添加特殊条件?
【发布时间】:2022-02-01 02:50:38
【问题描述】:

我有一个带有主题的array,我生成属性以添加到查询和bind_param

   $arr = explode(',', $theme);
   $strMarcas  = str_repeat('?,', count($arr) - 1) . '?';
   $strTipos = str_repeat('s', count($arr));

例如用法:

   WHERE main_cover in ($strMarcas)

而在bind_param

   $stmt->bind_param($strTipos, ...$arr);

现在的问题是我需要将其他条件传递给WHERE 示例:

   WHERE main_cover in ($strMarcas) AND language=? AND active=?

而且,我不知道如何通过条件,我已经尝试过:

   $stmt->bind_param($strTipos . "si", ...$arr, $language, $active);

而且,这会产生这个错误:

致命错误:参数解包后无法使用位置参数

【问题讨论】:

  • 以不同的顺序绑定你的参数
  • @TangentiallyPerpendicular 我不明白,我倒着做
  • @TangentiallyPerpendicular 只是如果我以不同的方式执行顺序,我有其他子查询与 where 并且我无法更改顺序。
  • 使用 ORM 可以帮助抽象问题,使其更容易解决。但一般这种东西,你应该在查询中动态创建?,然后动态绑定到它。这样,您可以拥有一个包含键和值的数组,然后动态生成带有问号的 sql 字符串,然后再次循环并一次绑定一个,使其与您的数组结构相匹配。
  • @KevinY 我看到我必须合并数组并增加另一个。

标签: php mysqli


【解决方案1】:

你可以这样做吗?

代替:

$stmt->bind_param($strTipos . "si", ...$arr, $language, $active);

哪些错误:

致命错误:参数解包后无法使用位置参数

您可以在尝试绑定之前附加到数组吗?

$ar[] = $language;
$ar[] = $active;
$stmt->bind_param($strTipos . "si", ...$arr);

如果这不起作用,你可以通过循环值来创建一个临时数组,然后附加最后一个 2,然后绑定临时数组吗?

【讨论】:

    【解决方案2】:

    为什么要使用bind_param()

    只需将数组传递给execute()

    $stmt->execute($arr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多