はじめに
PHPでSQLを使っているときに、次にエラーが表示されたことはありませんか?
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'slug'
この記事では、このエラーが何を意味しているか、そしてどう対処すればいいかを解説します。
2025-08-11
PHPでSQLを使っているときに、次にエラーが表示されたことはありませんか?
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'slug'
この記事では、このエラーが何を意味しているか、そしてどう対処すればいいかを解説します。
このエラーは「あるカラムに同じ値を2回入れようとしてしまった」場合に発生します。
例えば、次のようなエラーが出たとします
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'slug'
このメッセージを分解してみましょう。
Duplicate entry '1': '1'という値 を
for key 'slug': 'slug'というカラム(またはインデックス) に対して
入力しようとしたところ、すでにその値が存在していたため、UNIQUE制約に違反してエラーになった、という意味です。
つまり、'slug'に'1'という値を入れようとしたが、すでに同じ
slug='1'
のデータが存在していた、ということです。
UNIQUE制約とは、「特定のカラムの値は、他の値と重複してはいけない」 という制約のことです。
例えば、ユーザー登録時に「email」カラムにUNIQUE制約をつけると、同じメールアドレスで複数のユーザーを登録できなくなります。
これは、ユーザーを一意に登録するためや、URLの重複を防ぐなど、「同じ値が連続すると困る場面」 でよく使われます。
主に、以下のようなカラムに使われます。
ちなみに私の場合は、記事のURLに使う 'slug' が毎回 '1' になっており、同じ値を登録しようとしてエラーになっていました。
この場合は、データベースから 'slug' の値を書き換えることで解決しました。
自作CMSを使っているのですが、CMSの管理画面からは slug の値が変更できないようになっていたため、将来的には管理画面から 'slug' を編集できるように改善する予定です。