【问题标题】:How to pass dynamic parameter to the query?如何将动态参数传递给查询?
【发布时间】:2018-08-15 19:00:10
【问题描述】:

这是我的代码:

$param2 = $val2 = "";
if ($myCondition){
    $parm2 = ", param2 = ?";
    $val2 = "something";
}

$stmt = $dbh_conn->prepare("UPDATE myTable SET param1 = ? $param2 WHERE param3 = ?");
$stmt->execute([$val1, $val2, $val3]);

当条件为true 时,我的代码有效。当那是false 时,我该如何处理?

【问题讨论】:

  • 在相同条件下构建一个 $array 并传递给 execute。因此,如果 IF 没有发生,则数组缺少值。
  • @IncredibleHat 我知道在问这个问题之前,你的解决方案很无聊,因为实际上有 12 个参数:-( .. 我正在寻找一种干净的方法。但显然没有更好的方法。不管怎样,谢谢你。我想我必须同意你的想法..
  • 无聊?清洁器?呵呵......我相信你可以想出一些东西......只要戴上你的“开箱即用”的帽子!但是 u_mulder 所拥有的,几乎就是大多数人用它所做的。
  • 三元运算符?
  • @FunkFortyNiner 我不明白你的意思...

标签: php mysql sql dynamic


【解决方案1】:

下面是开始的代码:

$params = ['param1 = ?'];
$values = [$param1];
if ($myCondition){
    $params[] = 'param2 = ?'
    $values = [$param2];
}
$values[] = $param3;

$stmt = $dbh_conn->prepare("UPDATE myTable SET " . implode(', ', $params)  . " WHERE param3 = ?");
$stmt->execute($values);

您可以根据需要对其进行修改,但主要思想是收集将在数组中更新的所有值,然后将该数组内爆为字符串。

【讨论】:

    【解决方案2】:

    更简单的方法是:

    if ($myCondition){
    $stmt = $dbh_conn->prepare("UPDATE myTable SET param1 = ?, param2 = ? WHERE param3 = ?");
    $stmt->execute([$val1, "something", $val3]);
    } else {
        $stmt = $dbh_conn->prepare("UPDATE myTable SET param1 = ? WHERE param3 = ?");
    $stmt->execute([$val1, $val3]);
    }
    

    【讨论】:

      【解决方案3】:
      $param2 = $val2 = "";
      if ($myCondition){
          $parm2 = ", param2 = ?";
          $val2 = "something"; 
          $stmt = $dbh_conn->prepare("UPDATE myTable SET param1 = ? $param2 WHERE param3 = ?");
          $stmt->execute([$val1, $val2, $val3]);
      } else {
          $stmt = $dbh_conn->prepare("UPDATE myTable SET param1 = ? WHERE param3 = ?");
          $stmt->execute([$val1, $val3]);
      }
      

      【讨论】:

      • 这对哥们很有帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 2018-09-30
      相关资源
      最近更新 更多