2014-08-29 83 views
2

我对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') 
          "); 
?> 
+2

为什么不插入...重复密钥更新?任何你为什么不检查SQL错误? 'mysqli_query(...)或者死(mysqli_error())'会告诉你究竟是什么错误。 – 2014-08-29 16:19:09

+0

尝试在UPDATE行的末尾添加分号,并在INSERT行的末尾添加分号。 – 2014-08-29 16:23:33

+0

许多SQL DBMS都有扩展来处理这个问题。我不确定哪个提供了@Marc B的'重复键更新',但SQLite有'insert或replace into',我相信还有其他的变种。 – 2014-08-29 16:23:50

回答

2

你可以试试这个:

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') 
0

试试这个

$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(); 
} 
相关问题