【问题标题】:PHP PDO : Binding value in one foreach loop regarding insert into on duplicate key updatePHP PDO:在一个foreach循环中绑定值,关于在重复键更新时插入
【发布时间】:2014-10-19 03:14:45
【问题描述】:

我使用两个 foreach 循环将值绑定到位置参数,一个用于INSERT INTO,另一个用于DUPLICATE KEY UPDATE。我试图将其减少到一个循环。但是 array_merge 没有用。有人可以告诉我如何只使用一个循环来完成它吗?

这是一个例子:

  $facts = array("age","race");

  $ifield = "";
  $ufield="";
  $comma = "";
  foreach($facts as $f)
  {  
    $$f  = (isset($_POST["$f"])?$_POST["$f"]:"");
    if ($$f)
    {    
      $ifield .= $comma.$f;
      $ufield .= "{$comma}{$f} = ?";
      $comma = ",";
    }
  }

  $i = explode(',',$ifield);

  $in  = str_repeat('?,', count($i) - 1) . '?';   

  $sql .= "INSERT INTO `users` (user_id,model_no,{$ifield}) VALUES(?,?,$in)";

  $sql .= " ON DUPLICATE KEY UPDATE $ufield";

  $users = $dbh->prepare($sql);

  $user_id = $_SESSION['user_id'];
  $model_no = $_POST["model_no"];

  $users->bindValue(1,$user_id);
  $users->bindValue(2,$model_no);

  /****************************************************************/    
  $i = 3;

  foreach($facts  as $f)   
  {
    global $$f;

     if ($$f)
     {    
       $users->bindValue($i++, $$f);

     }
  }

  foreach($facts  as $f)
  {
    global $$f;

     if ($$f)
     {    
       $users->bindValue($i++, $$f);

     }
  }

  $users->execute();

【问题讨论】:

  • 你能举一个_POST数组的例子吗?

标签: php mysql pdo foreach


【解决方案1】:

您不需要在ON DUPLICATE KEY 子句中使用绑定参数。使用:

$ufield = "$comma $f = VALUES($f)";

ON DUPLICATE KEY 子句中使用VALUES(columndname) 使其使用本应插入该列的值。见documentation

【讨论】:

    猜你喜欢
    • 2017-02-03
    • 2013-04-28
    • 2021-03-28
    • 2018-09-18
    • 2013-03-05
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多