2015-01-09 50 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的唯一解決方案,它適用於我,因爲我只會更新這些值。

注意:它不適用於嵌套數組。如果你需要多個陣列,你必須自己解決。