# SQL ステートメントの特殊文字の処理
+ たとえば **`'`**:
  + **`INSERT INTO test.mdk (title) values ('Mother's day kisses')`**
+ 解決策
  + 解決策 A: バックスラッシュの **`(\)`** 文字を使用してエスケープする
  + 解決策 B: バッククォートを使う
  + 解決策 C: **`mysqli::real_escape_string`** を使う
  + 解決策 D (推奨): プレースホルダーとプリペアドステートメントを使用する
------------------------------------------------------------

クォーテーションやバックスラッシュなど、SQL ステートメントの一部の特殊文字は問題の原因となります。スライドの例では、名前の一部に一重クォーテーションが含まれている`Mother's`という名前は、ステートメントの構文を無効にします。いずれかの文字エスケープ方法を使用する必要があります。これは、SQL を自分でコーディングしていて、考えられるすべての値を事前に把握している場合は簡単ですが、実行時にユーザーが値を入力するアプリケーションを作成している場合や、データが他のソースから取得されている場合は問題になる可能性があります。

`mysqli::real_escape_string` を使用する例:
```
...
    $content = "Mother's day kisses";
    $query = sprintf("INSERT INTO mdk (content)"
      . " VALUES "
      . "('%s')", $mysqli->real_escape_string($content));
    $num = $mysqli->query($query);
...
```

この問題の最善の解決策は、プレースホルダーを使用するソリューション D です。PHP プログラムの場合は、プリペアドステートメントを使用してこれを実現する。

201.3コースでは、プリペアドステートメントについて議論しました。次の単元でもう一度学習します。