2011-09-24 22 views

回答

1

如果你真的不知道是否有記錄,那麼你可能需要在程序流程中稍早檢查一下。通常我會啓動函數或任何與調用數據庫,如果我沒有得到一個現有的記錄對象,我從stdClass中創建一個新的。

這有兩個好處:第一,這意味着你知道現有的數據,所以你可以在需要時使用它,而不是盲目地覆蓋它。第二:當你寫到數據庫時,你知道它是INSERT還是UPDATE,取決於對象是否有id屬性。

+0

我每次生成兩個主鍵(沒有一個是自動遞增)記錄,所以在DB我不能沒有測試檢查記錄英寸我認爲最簡單的方法是首先嚐試刪除記錄並插入。但是我擔心桌面開銷...... – neworld

+0

你是指複合鍵嗎?這對我所概述的方法沒有任何影響。只需在WHERE子句中使用該字段組合來執行SELECT *並查看返回的內容。表中還有其他字段,除了用於鍵的那些字段(即這是一個多對多連接表)嗎? –

+0

我有一個簡單的查詢。所以我自己編寫通用函數,因爲我經常需要它。 – neworld

1

我實現了自己的功能:

function drupal_write_record2($table, $data, $primaryKeys) { 
    $data = (array)$data; 

    $query = db_select($table) 
     ->fields($table); 

    if (is_array($primaryKeys)) 
     foreach ($primaryKeys as $key) 
     $query->condition($key, $data[$key]); 
    else 
     $query->condition($primaryKeys, $data[$primaryKeys]); 

    $update = (bool)$query->execute()->fetchAssoc(); 

    if ($update) 
     return drupal_write_record($table, $data, $primaryKeys); 
    else 
     return drupal_write_record($table, $data); 
}