簡體   English   中英

檢查MySQL Row是否存在

[英]Check if MySQL Row exists

如何檢查表行是否存在以及是否不存在行? 到目前為止我有這個:

$id = $user->getID();
$username = $user->username;
$check = "SELECT id FROM users WHERE nickname = '".$username."'";
$result = mysql_query($check);

if(mysql_num_rows($result)){
$user->parent->mysql->query("INSERT INTO $ngtable (`id`, `namecolor`, `glowcolor`, `bubblecolor`, `bubbletext`, `bubbleglow`, `ringcolor`, `snowglow`) VALUES ('".$id."','0x','0x','0x','0x','0x','0x','0x')");
}else{
$user->parent->mysql->query("UPDATE $ngTable SET namecolor = '0x" . $arg . "' WHERE id = '" . $user->getID() . "'");
$user->sendPacket("%xt%sm%-1%0%$user->username, your name color is now: $arg%");
}

MySQL INSERT支持ON DUPLICATE KEY UPDATE - 這將是最有效的方式。

例如...

INSERT INTO table_name (id, foo, bar) VALUES (7, 'baz', 'bat') ON DUPLICATE KEY UPDATE foo='baz', bar='bat'

當然,這依賴於您的表具有唯一索引(主鍵將執行),您的插入將導致與之沖突,從而觸發更新。

雖然您需要在昵稱上設置一個表約束是唯一的,但最好的方法可能是使用MySQL替換語法 ,它一舉完成您想要的操作。

replace INTO 
    $ngtable 
        (`id`, `namecolor`, `glowcolor`, `bubblecolor`, `bubbletext`, `bubbleglow`, `ringcolor`, `snowglow`) 
    VALUES 
        ('".$id."','0x','0x','0x','0x','0x','0x','0x')

來自文檔:

REPLACE與INSERT的工作方式完全相同,只是如果表中的舊行與PRIMARY KEY或UNIQUE索引的新行具有相同的值,則在插入新行之前刪除舊行。

MySQL使用以下算法進行REPLACE(和LOAD DATA ... REPLACE):嘗試將新行插入表中雖然插入失敗,因為主鍵或唯一索引發生重復鍵錯誤:從表中刪除具有重復鍵值的沖突行再次嘗試將新行插入表中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM