2012-12-10 194 views
0

對於我的員工表,電子郵件是一個獨特的領域。當我插入新員工時,我會檢查電子郵件的存在。如果它已經存在,您會收到一條錯誤消息:PHP MYSQL如何檢查UPDATING時記錄是否已經存在?

$selectquery ="SELECT * FROM employee WHERE empemail='$empemail'"; 
    $selectresult=mysql_query($selectquery) or die("query fout " . mysql_error()); 
    if(mysql_num_rows($selectresult)==1) 
    { 
     $errormsgnewemployee = '<p id=notification>The email you entered already exists.</p>'; 
    } 

但是如何在更新字段時執行此操作?因爲如果我更新員工數據(不更改他的郵件),它不會讓我,因爲電子郵件已經存在。我能想到的只是先進行更新,然後檢查是否有2條記錄,如果有2條記錄,則將它更新回原來的位置。

這是一個好方法還是有更好的解決方案?

編輯

自己的解決方案是更新其在桌子上unique index和使用查詢錯誤表:

if (mysql_error()) 
      { 
       $errormsgnewemployee = '<p id=notification>Update failed. Please check if the email you entered already exists.</p>'; 
      } 

因爲,否則爲什麼用戶有錯誤,如果它不是唯一唯一的領域?在所有其他情況下,更新會成功。

+0

爲什麼不在表單中傳遞參數,無論是「$ action = UPDATE」還是「INSERT」? – Touki

+0

那不是問題Touki,它是關於如何編寫UPDATE問題的檢查,不返回數據庫錯誤,但我自己的文本。我正在嘗試使用捕獲錯誤號的解決方案,查找語法等。 –

+0

** Heads up!** PHP的未來版本是*棄用和刪除mysql_'系列函數。現在將是[切換到PDO](http://php.net/book.pdo)或[mysqli](http://php.net/book.mysqli)的好時機。 – Charles

回答

3

您可以使用相同的解決方案,您只需「取回此電子郵件地址,但不是我的」,以檢查是否有任何其他用戶正在使用它。

例如,更新前,做這樣的事情:

SELECT 1 FROM employee WHERE empemail = '$empemail' AND id != '$myid';

應該只返回在電子郵件屬於別人的行。

在附註中,將變量插入到SQL查詢中存在潛在的安全問題 - 您不應該這樣做。而且mysql_ *函數被棄用,應該用PDO或mysqli替代替換。

+0

非常感謝。有用。 –

3

我會建議你使用INSERT ... ON DUPLICATE UPDATE ... SQL構造。深入瞭解manual

所以,你的查詢可以是以下幾點:

INSERT INTO employee (email, first_name, last_name, ...) 
VALUES ('[email protected]', 'nik', 'smtih', ...) 
ON DUPLICATE UPDATE 
    first_name = 'nik', 
    last_name = 'smith', 
    ... 

注重這個查詢的INSERT部分將失敗的原因UNIQUE KEY約束,這也就是爲什麼查詢,ON DUPLICATE UPDATE的第二部分,將被執行,數據將被更新而不是插入。

+0

謝謝,這真的很有用。但是,我現在怎麼能讓用戶知道它何時更新成功,以及何時更新,除了電子郵件,例如 –

相關問題