UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#051 MySQLのSQLでシングルクォーテーションのエスケープの必要性

記入日:2023-02-28 編集日:2023-02-28

SQL見るだけクエリ。今回は、MySQLのSQLでシングルクォーテーションのエスケープの必要性と具体的な解決方法について考えてみようと思います。

この記事を読むと(約5分)
SQLでシングルクォーテーションのエスケープの必要性と具体的な解決方法が理解できます。その他にエスケープしなければいけない文字もある。

SQLでは、文字列を扱う場合に、シングルクォーテーション(「’」)を使って文字列の前後を囲います。
その際に、文字列中にシングルクォーテーションを含む文字を使うと、
データベースが文字列の終端と誤認識するため、Syntaxエラーとなります。

例えば、以下のようなSQL文はエラーになります。

INSERT INTO users (name) VALUES ('Let'GO!');

この場合、文字列中のシングルクォーテーションをエスケープして回避する必要があります。
エスケープする方法は、シングルクォーテーションを二重にすることで回避する方法があります。

 

つまり、以下のように書きます。

INSERT INTO users (name) VALUES ('Let''GO');

これで正しく文字列として扱われます。

シングルクォーテーション以外でも
エスケープしなければいけない文字があり、
MySQLで使えるエスケープ文字は次のようなものがあります。

\0 NUL
\' シングルクォーテーション
\" ダブルクォーテーション
\b バックスペース
\n 改行
\r 復帰
\t タブ
\\ バックスラッシュ
\% %
\_ _

これらの文字を文字列中に使う場合は、
前にバックスラッシュを付けてエスケープする事ができます。

 

例えば、シングルクォーテーションも以下のように書く事もできます。

INSERT INTO users (name) VALUES ('Let\'GO!');

PHPでシングルクォーテーションをエスケープする方法として、 シングルクォーテーションを重ねる方法と、バックスラッシュを使う方法どちらがいいかは、 場合によりますが、一般的にはバックスラッシュを使う方が見やすくて便利です。

ただし、文字列の中にバックスラッシュやダブルクォーテーションがある場合は、
それらもエスケープする必要があります。

 

PHPにはエスケープ関連の関数もあります。
例えば、addslashes関数やstripslashes関数などです。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。