2011-12-28 41 views
1

每當我執行更新查詢時,我的整個表都會更新。當我只想要更新一個值時,我需要做什麼?只更新數據庫中的一個表

這裏是我的數據庫結構:

ID ||  photo  || sequence 
1 || test.png ||  1 
2 || bla.png  ||  2 

每當我執行這個腳本,

if (isset($_POST['submitted'])) { 
    $project = new Project(); 

    $project->sequence = $_POST['sequence'][$key]; 
    $projectid   = $_POST['photoid']; 

    if($project->updateProject($_DB, $projectid)) { 
     $feedback = "OK"; 
    } else { 
     $feedback = "NOT OK"; 
    } 
} 

結果在此:

ID ||  photo  || sequence 
1 ||    ||  4 
2 ||    ||  2 

所以,我有什麼做只需更新數據庫中的sequence值,而不觸及數據庫中的其餘數據ASE ...

功能

public function updateProject($db, $id) { 
     $sql = "UPDATE tblProject SET 
      sequence = '".$db->escape($this->sequence)."' 
     WHERE id = '".$id."'"; 
     return $db->insert($sql); 
    } 

插入功能

public function insert($sql) { 
    mysql_query($sql, $this->_connection); 
    return mysql_affected_rows($this->_connection); 
    } 
+2

OK - 我有一個建議。啓用通用日誌並查看查詢。可能另一個查詢在腳本的另一部分中運行。當您看到查詢時,您可能會將其追溯回代碼。 – 2011-12-28 21:01:37

回答

1

您的$project->updateProject()函數一定有問題。

嘗試用簡單的查詢:

$qry = "UPDATE tblProject SET sequence = '".$project->sequence."' 
     WHERE ID =".(int)$projectid."; 
mysql_query($qry); 
1

基本上,只要你這個問題,你沒有任何更新的表WHERE子句。像下面的代碼:

UPDATE myTable SET myField = 'newValue'; 

在這種情況下,所有存儲的記錄將更新爲新值。

在查詢中使用WHERE子句只更新一個或某些指定的記錄。

UPDATE myTable SET myField = 'newValue' WHERE tableId = 'yourId'; 
+0

我的'updateProject'函數中包含'WHERE'子句,不是嗎? – Michiel 2011-12-28 20:38:18

+0

如果你有它,我認爲你在運行你的查詢時有一些錯誤。你可以檢查是否有任何錯誤? – 2011-12-28 20:42:28