PHPを独学するなら、Udemyの動画講座で
PHP 7も使えて快適な エックスサーバー

「Duplicate entry '1' for key 'PRIMARY'」エラーは、データベース(テーブル)に入力しようとしたデータの主キー(idフィールドなど)がすでに使われていることを示しています(重複不可のため)。

エラーの再現

現在、idフィールドには1から5までが使われています。

現在のデータ

現在のデータ

idが重複するデータを入力します。以下はデータベース管理ツール「phpMyAdmin」での入力例です。

idが重複するデータを入力

idが重複するデータを入力

実行すると、主キーが重複するというエラーメッセージが表示されます。

「Duplicate entry '1' for key 'PRIMARY'」エラー

「Duplicate entry '1' for key 'PRIMARY'」エラー

このパターンでエラーメッセージが表示された場合、idフィールドに重複しない値を入力すれば解決です。idフィールドが連番(AUTO_INCREMENT)に設定されている場合、自動で重複しない連番が割り当てられるので、何も入力する必要はありません。

連番には何も入力する必要がない

連番には何も入力する必要がない

データインポートでエラーになる場合

既存テーブルにデータをインポートするときにこのエラーが発生する場合があります。

たとえば、データをインポートするtable1.sqlに次のように記述されていると、既存のテーブルと主キーが重複するので、エラーになります。

INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(1, '高橋一郎', '鳥取県', 60);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(2, '近藤次郎', '青森県', 40);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(3, '山下三郎', '大阪府', 55);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(4, '新田史郎', '沖縄県', 18);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(5, '小川五郎', '埼玉県', 30);
データインポートでエラーになる

データインポートでエラーになる

エラーを回避するにはINSERT文を変更して、明示的に割り当てられている1から5までのidを「NULL」にします。

INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '高橋一郎', '鳥取県', 60);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '近藤次郎', '青森県', 40);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '山下三郎', '大阪府', 55);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '新田史郎', '沖縄県', 18);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '小川五郎', '埼玉県', 30);

インポートを実行すると、連番が自動で割り当てられてデータが追加され、エラーは発生しません。

連番が自動で割り当てられる

連番が自動で割り当てられる

手作業で1行ずつ修正するのは面倒ですが、エディタの置き換え機能で正規表現を使えば、連番を一括で「NULL」に置き換えることもできます。以下は秀丸エディタで正規表現による置換を行うときの指定例です(3桁までの数値を「NULL」に変更)。

秀丸エディタによる一括置換

秀丸エディタによる一括置換

スポンサーリンク

こちらもどうぞ

こちらも参考にしてください

関連記事

MySQL

phpMyAdmin

PHPサンプルコード

PHP全般

PHP関数

WordPress

PHPの基礎が身に付いたかチェック!

PHP「直す力」養成ドリル
スポンサーリンク