如何检查表格行是否存在以及是否不存在行?到目前为止,我有这个:
$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%");
}
答案 0 :(得分:2)
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'
当然,这依赖于您的表具有唯一索引(主键将执行),您的插入将导致与之冲突,从而触发更新。
答案 1 :(得分:0)
虽然你需要在昵称上设置一个表约束是唯一的,但最好的方法可能是使用MySQL replace syntax来完成你想要的一切。
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): 尝试将新行插入表中 插入失败,因为主键或唯一索引发生重复键错误: 从表中删除具有重复键值的冲突行 再次尝试将新行插入表