PHPでMySQLのテーブルにINSERT文でデータが追加されない時に確認しておきたいこと


PHPでMySQLを取り扱っている時にPHPスクリプトでSQL文を発行してINSERT文でテーブルにデータを追加することはよくありますが、エラー表示が出ていないのになぜかデータが追加されないということに遭遇することがあります。

INSERT文がテーブルの構造に合っていなかったりスペルミスで変数名を間違えているなどソースコード上で気づける部分もありますが、それ以外にもなかなか発見しにくいエラーもあります。

ここではPHPでMySQLのテーブルにINSERT文でデータが追加されない時に確認しておきたいことをご紹介します。

テーブルの構造が原因


テーブルの構造でフィールドに対するデータ型がVARCHAR型(文字列)である場合に最大文字数を設定しますが、追加する文字列の文字数が設定より大きくなる場合にはうまくデータを追加することができません。
しかもエラー表示がされないことが多く、どこが間違えているかに気づきにくい部分でもあります。

VARCHAR型の最大文字数の設定は返ってくる値を考えた上で、少し余裕をもたせた数値で設定すると良いでしょう。

VARCHAR型の最大文字数の設定



ご意見などの長めのテキストをもらうようなWebアプリケーションでは、フロント側でJavaScriptやjQueryを使って文字数を制限してあげると良いでしょう。

MySQLの予約語を利用している


MySQLで予約語を利用しているとプログラム上、エラーが発生します。
予約語は意外と多いので確認しておくと良いでしょう。

2018年4月にMySQL8.0の正式版がリリースされて、追加された予約語もありますので最新バージョンの情報と2つ載せておきます。

MySQLの予約語

9.3 Keywords and Reserved Words(MySQL 5.7 Reference Manual)

9.3 Keywords and Reserved Words(MySQL 8.0 Reference Manual)

2018年12月現在、多く利用されているMySQLのバージョンがMySQL5.7かと思います。
Webアプリケーションでユーザーの情報を取り扱う時にはユーザー名を格納するフィールドとして「name」というフィールド名にしてしまうことがあるかもしれません。
MySQL5.7では問題ないですが、今後MySQL8の利用が増加することを考えてフィールド名の「name」はMySQLの予約語となりますので、今後のエラーを避けるためにフィールド名を「nickname」や「username」のように変更しておくと良いでしょう。