2016-04-29 156 views
1

我想讓我的PHP檢查,如果具有相同特定數據的東西已經存在於我的數據庫表中。如何防止插入重複記錄?

我有一個名爲test的數據庫,其表名爲users

這是我想要檢查一行steamid已存在與相同的$steamid號碼。

<?php 

// Datebase infomation 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "test"; 
$steamid = $steamprofile['steamid']; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
// Create data 

$sql = "INSERT INTO users (steamid) 
VALUES ('$steamid')"; 

if (!$conn->query($sql) === TRUE) { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

$conn->close(); 
?> 
+3

你知道「REPLACE INTO」嗎? – Jeremy

+0

不,這是如何工作的? –

+1

如果存在主鍵,則更新該行,否則會創建一行。 – Jeremy

回答

1

您需要在steamid列添加PRIMARY KEYUNIQUE constraint

刪除所有副本後,那麼你就可以運行這個命令:

ALTER TABLE users ADD PRIMARY KEY(steamid) 

然後如果你試圖重複steamid插入users表查詢將會失敗。

as @Jeremy mentioned,您可以使用REPLACE,但這也是only works if you have a PRIMARY KEY or UNIQUE constraint on the column。如果除了要存儲在數據庫表中的steamid以外還有其他列,則這是首選方法,因爲它將更新這些值。但是,由於在問題INSERT INTO users (steamid) VALUES ('$steamid')中所述的查詢僅包含一個字段,因此除非您想要捕獲嘗試重複記錄的條件錯誤,否則這並不重要,在這種情況下,您應該堅持使用INSERT聲明。

+0

謝謝,我現在明白了。 –