2016-04-29 27 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 KEYまたはUNIQUE constraintを追加する必要があります。

すべての重複を削除した後、あなたは、このコマンドを実行することができます。

ALTER TABLE users ADD PRIMARY KEY(steamid) 

あなたはusersテーブルに重複したsteamidを挿入しようとするならば、あなたのクエリが失敗します。

@Jeremy mentionedとすると、REPLACEでも使用できますが、これもonly works if you have a PRIMARY KEY or UNIQUE constraint on the columnです。これらの値が更新されるため、データベーステーブルに格納するsteamid以外の列がある場合は、この方法をお勧めします。ただし、質問INSERT INTO users (steamid) VALUES ('$steamid')に記載されているクエリには1つのフィールドしか含まれていないため、複写しようとしたレコードの条件付きエラーをキャッチしない限り、それほど大きな影響はありません。その場合はINSERTステートメントに固執する必要があります。

+0

ありがとう、私は今それを得た。 –

関連する問題