2014-08-29 77 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(); 
} 
相關問題