我對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')
");
?>
爲什麼不插入...重複密鑰更新?任何你爲什麼不檢查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