2017-04-18 43 views
1

我有一個數據庫表test_users如果ID存在於重複鍵的使用,否則插入

| id | Username | Password | 
| 1 | pat | ***** | 
| 2 | roger | ***** | 
| 3 | luke93 | ***** | 

並插入新行我用下面的代碼,並能正常工作:

$sql = $conn->prepare("INSERT INTO `test_users` (`Username`, `Password`) VALUES (?,?)"); 
$sql->bind_param('ss',$name, $email); 

但現在我正在嘗試製作「更新配置文件」頁面,並且我想使用ON DUPLICATE KEY。這意味着我需要檢查是否存在id,如果有,請更新該行。 UsernamePassword都不是唯一的,但是id是。我有一個$ _SESSION [「id」],如果用戶已經登錄就可以使用。我可以以某種方式使用它嗎? 那麼如何編寫一個SQL語句來判斷是否存在id,如果是,用ON DUPLICATE KEY(或更好的方法)覆蓋它?

+0

嘗試是否存在()函數。使用下面的鏈接[解決方案](http://stackoverflow.com/questions/12639407/sql-if-exists-update-else-insert-syntax-error) –

+0

指定唯一字段的唯一鍵,然後嘗試查詢 http ://stackoverflow.com/questions/4205181/insert-into-a-mysql-table-or-update-if-exists –

+0

檢查 - https://dev.mysql.com/doc/refman/5.7/en/insert -on-duplicate.html –

回答

0

第一次寫SELCT查詢和計數NUM行如果0然後插入查詢其他火更新查詢

+0

我認爲這一點,但希望有與ON DUPLICATE KEY的解決方案。但那不可能? – William82

+0

當你插入如果提交自動增量主要那麼你如何獲得ID? –

+0

當您登錄時您將獲得您的身份標識。它會保存在會話中。如果你沒有登錄,你將不會與你的ID – William82

0

UPDATE的工作方式相同的插入。你只需要傳遞WHERE條件。 您可以用下面的代碼做到這一點,試試吧

$id = $_SESSION['id']; 
$sql = "UPDATE test_users SET Username=?, Password=? WHERE id=?"; 
$stmt = $conn->prepare($sql); 
$stmt->bind_param($Username, $Password, $id); 
$stmt->execute(); 
+0

是的,我知道這是我找到的最好的解決方案,但我希望這裏有些人知道更好的解決方法。 – William82

+0

我不這麼認爲有其他解決方案,而不是'重複密鑰更新' –

+0

但我無法使它與重複密鑰一起工作。 – William82

0

分配你的獨特領域的唯一密鑰,並嘗試下面的查詢 Insert into a MySQL table or update if exists

INSERT INTO test_user(id, username, password) VALUES(1, "test", "test") ON DUPLICATE KEY UPDATE  

username="test", password="test" 
+0

,但與那個我總是會更新行['id'] = 1,對不對? – William82

+0

@ William82你可以使id成爲動態的,這僅僅是例子 –

+0

那麼我怎樣才能使它動態和自動增量? – William82

0

使用INSERT ...對重複密鑰更新

QUERY:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE  
name="A", age=19 

Credit to Donnie

+0

這是如何工作的。它在Id中表示值1。它不會只更新Id爲1的位置嗎?如果它是動態的,我應該使用什麼變量? – William82

相關問題