質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

解決済

XAMPPを用いてブラウザからデータ登録 エラーを解消したいです。

mememe0331
mememe0331

総合スコア55

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

2回答

0リアクション

1クリップ

273閲覧

投稿2022/07/31 01:46

編集2022/07/31 02:42

前提

XAMPPを使用して、ブラウザからデータの登録を行いたいです。
しかし、重複したpid(ID)を登録する際にエラーが表示されてしまい、困っています。

実現したいこと

写真のようなデータをベースを作成して、XAMPPを用いて、ブラウザからデータの登録を行っています。
イメージ説明

pid(ID)を主キーで設定しただけでは、重複したpid(ID)を登録する際に、

Uncaught mysqli_sql_exception: Duplicate entry 'a123' for key 'PRIMARY'

というエラーが表示されます。

このエラーを表示させずに、別ブラウザで「このIDは既に使用されています」のように表示させたいです。

発生している問題・エラーメッセージ

同じpid(ID)のデータを登録しようとした際に、登録できないクエリを使用すれば、エラーは発生しないと考えて、以下のクエリを考えたのですが、

$query = "INSERT INTO products VALUES ('{$pid}', '{$name}', '{$cost}', '{$price}') WHERE NOT EXISTS (SELECT pid, name, cost ,price FROM products WHERE pid = '{$pid}')";

操作を行ったところ、

Uncaught mysqli_sql_exception: SQL 構文にエラーがあります。

とエラーが表示されます。
SQL文のどこが構文エラーになっているのでしょうか?

何かわかる方がいらっしゃりましたら、教えて頂きたいです。

試したこと

NOT EXISTSの使い方 で検索
INSERT 重複無し で検索

補足情報(FW/ツールのバージョンなど)

Windows10、XAMPP

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

SurferOnWww

2022/07/31 01:59 編集

> 同じIDのデータを登録しようとした際に、登録できないようにしたいです。 何故 ID を主キーにするとか、ユニーク制約をつけるとかしないのですか?
mememe0331

2022/07/31 02:02

コメントありがとうございます。 IDを主キーにしていますが、もう一度同じIDを登録する際に、致命的なエラーでブラウザが止まってしまうことを避けたくて、今の質問に至っています。
SurferOnWww

2022/07/31 02:23 編集

> IDを主キーにしています であれば、質問に書いてあるあなたのやりたいこと「同じIDのデータを登録しようとした際に、登録できないようにしたい」はできていることになります。 上に書いた「致命的なエラーでブラウザが止まってしまうことを避けたく」という話は今初めて聞きました。さらに、話は MySQL にとどまらず、MySQL に INSERT する Web アプリも絡んでいると想像してますが、違いますか? 情報の後出し小出しはこういう Q&A サイトでは NG です。質問は編集できるので見直してください。
m.ts10806

2022/07/31 02:29

タイトルと質問内容がずれていること(もしくは主語が違う、大きさの問題もあり)も見ている人を混乱させてしまう元となると思います。 質問タイトル、本文を修正し、「解決したい問題」に焦点を絞ってください。
mememe0331

2022/07/31 02:36

ご指摘ありがとうございます。 内容を修正いたします。
SurferOnWww

2022/07/31 02:58 編集

ここのコメントは回答欄に移動しました。
m.ts10806

2022/07/31 03:53

細かいですが、XAMPPは各ツール、言語の集合体なので、実際に動作させてるのはPHPになるのではと。 もちろん、MySQL(MariaDB)直に実行して想定の結果が得られるSQL文を作るのは必須ではありますが。
SurferOnWww

2022/07/31 08:38

質問者さん、その後無言ですが、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。