2015-01-09 51 views
0

有一种方法只更新传递的参数并保持其他的不变?我正在寻找一种避免查询构建的方法。例如我想更改描述字段并留下邮箱不变:更新只传递参数

$MyArray['email']=''; 
$MyArray['description']='The new description'; 

$Result = pg_query_params($db,'UPDATE users SET email=$1, description=$2 WHERE id = $3', array($MyArray['email'],$MyArray['description'],$User['id'])); 

感谢 d

+0

@Isfirs和LuckyBurger:问题是在确定哪些更新之后,它是:如何在不影响其他字段并使用pg_query_params的情况下更新未识别的特定查询。 – DPZ

回答

0

没有容易方式...... SQL不具备此功能,但你可以在做在你的应用逻辑中简单的时尚。

  1. 在您的形式序列化的原始实例数据

    连载($ myDataArray)

  2. 一旦发布更新,把它比作序列化的数据

    反序列化($ myDataArray) ;

    $ diff = array_diff($ original,$ modified);

这应该给你一个如何去做的想法。

0

正如我所做的那样,您可以构建一个小包装来检查更改后的值。

类这样方法列一类我使用的:

 
    /** 
    * Checks for changes between $old and $new. 
    * All arrays must be assoc. 
    * 
    * The keys of $map are the keys of $old and the values of $map are the keys of $new: 
    * $map: key => $old[key] 
    * $map: val => $new[key] 
    * 
    * The return is an array with $old keys and $new values. 
    * 
    * @param array $old 
    * @param array $new 
    * @param array $map 
    */ 
    public function checkChanges(array $old, array $new, array $map) { 
     $toReturn = array(); 

     foreach ($map as $oldKey=>$newKey) { 
      if ($old[$oldKey] != $new[$newKey]) { 
       if (is_string($new[$newKey])) { 
        $toReturn[$oldKey] = "'".$new[$newKey]."'"; 
       } else { 
        $toReturn[$oldKey] = $new[$newKey]; 
       } 
      } 
     } 

     if (count ($toReturn) == 0) { 
      return null; 
     } 

     return $toReturn; 
    } 

第一阵列包含旧不变值。第二个是新的已更改和未更改的值(取决于您的或您的用户输入),最后一个将保留数组键作为第一个数组的键,而您将该值用作第二个数组的键。

这将是一个PHP的唯一解决方案,它适用于我,因为我只会更新这些值。

注意:它不适用于嵌套数组。如果你需要多个阵列,你必须自己解决。