SQL:如果存在,更新else插入
问题描述:
我对SQL和PHP很新,但是我想添加一个用户到列表中,如果一个入口不存在与他们的ip。如果条目确实存在,我只想更新他们的用户名。SQL:如果存在,更新else插入
我可以在没有打嗝的情况下在“if exists”语句之外执行这两个操作,但它显然会创建很多重复项。当我将它包装在“if exists”语句中时,查询将停止执行任何操作。
我知道关于这个问题有几个问题,但我已经尝试了大部分的建议,如果有另一种方法来做到这一点,我会很乐意考虑它,谢谢。
<?php
$username = strval($_GET['username']);
$userip = $_SERVER['REMOTE_ADDR'];
$con = mysqli_connect("localhost", "ramendev_jctwood", "M1n1flam3", "ramendev_jctwood") or die ("Failed to connect to MySQL: " . mysqli_connect_error());
mysqli_query($con, "IF EXISTS (SELECT 1 FROM Users WHERE Userip='$userip')
UPDATE Users SET User='$username' WHERE Userip='$userip'
ELSE
INSERT INTO Users (User, Userip) VALUES ('$username', '$userip')
");
?>
答
在MySQL中,你可以使用替换条命令。
REPLACE INTO users set User='$username' , Userip='$userip'
领域USERIP mustbe唯一索引瓯主键
答
你可以试试这个:
IF (SELECT COUNT(*) FROM Users WHERE Userip='$userip') > 0
UPDATE Users SET User='$username' WHERE Userip='$userip'
ELSE
INSERT INTO Users (User, Userip) VALUES ('$username', '$userip')
答
试试这个
$query = "SELECT * FROM Users WHERE Userip='$userip'";
$check = mysql_query($query);
if(mysql_num_rows($check)) {
$existdata = mysql_fetch_array($check);
$newquery = "UPDATE Users SET User='$username' WHERE Userip='{$existdata['Userip']}'";
} else {
$newquery = "INSERT INTO Users (User, Userip) VALUES ('$username', '$userip')";
}
$execute = mysql_query($new_query);
if($execute){
echo "Success";
} else {
echo mysql_error();
}
答
这里是文档告诉我们的情况下,当你有主键http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
为什么不插入...重复密钥更新?任何你为什么不检查SQL错误? 'mysqli_query(...)或者死(mysqli_error())'会告诉你究竟是什么错误。 – 2014-08-29 16:19:09
尝试在UPDATE行的末尾添加分号,并在INSERT行的末尾添加分号。 – 2014-08-29 16:23:33
许多SQL DBMS都有扩展来处理这个问题。我不确定哪个提供了@Marc B的'重复键更新',但SQLite有'insert或replace into',我相信还有其他的变种。 – 2014-08-29 16:23:50