diff --git a/reference/mysqli/mysqli/quote-string.xml b/reference/mysqli/mysqli/quote-string.xml
new file mode 100644
index 0000000000..e11d69edd3
--- /dev/null
+++ b/reference/mysqli/mysqli/quote-string.xml
@@ -0,0 +1,174 @@
+
+
+
+
+
+ mysqli::quote_string
+ mysqli_quote_string
+ SQL 文で使用する文字列をエスケープし、クォートで囲む
+
+
+
+ &reftitle.description;
+ &style.oop;
+
+ public stringmysqli::quote_string
+ stringstring
+
+ &style.procedural;
+
+ stringmysqli_quote_string
+ mysqlimysql
+ stringstring
+
+
+ SQL 文中で使用できる正しい形式の SQL 文字列リテラルを作成します。
+ 指定した文字列は、接続で使用している現在の文字セットを考慮して
+ mysqli::real_escape_string と同じ方法でエスケープされたうえで、
+ シングルクォートで囲まれます。
+ そのため、戻り値にはクォートを追加せず、そのままクエリに埋め込む必要があります。
+
+
+ mysqli::real_escape_string とは異なり、
+ 接続で NO_BACKSLASH_ESCAPES SQL モードが有効になっている場合でも、
+ 結果を安全に使えます。
+
+
+ セキュリティ: デフォルトの文字セット
+
+ 文字セットは、サーバーレベルか API 関数
+ mysqli_set_charset のどちらかで設定しないと、
+ mysqli_quote_string に反映されません。詳細は
+ 文字セットの概念
+ を参照ください。
+
+
+
+
+ クォートが適しているのは、文字列リテラルだけです。
+ テーブル名やカラム名などの識別子は、クォートしても安全にはなりません。
+ 可能な限り、プリペアドステートメント
+ を使い、クエリを手動で組み立てるのは避けてください。
+
+
+
+
+
+ &reftitle.parameters;
+
+
+ &mysqli.link.description;
+
+ string
+
+
+ エスケープしてクォートで囲む文字列。
+
+
+ エンコードされる文字は
+ NUL (ASCII 0)、
+ \n、\r、
+ \、'、
+ "、および
+ CTRLZ
+ です。
+ 接続で NO_BACKSLASH_ESCAPES SQL モードが有効になっている場合は、
+ ' だけを 2 つ重ねてエンコードします。
+
+
+
+
+
+
+
+
+ &reftitle.returnvalues;
+
+ シングルクォートで囲んだ、エスケープ済みの文字列を返します。
+
+
+
+
+ &reftitle.examples;
+
+ mysqli::quote_string の例
+ &style.oop;
+
+quote_string($city));
+$result = $mysqli->query($query);
+printf("Select returned %d rows.\n", $result->num_rows);
+
+/* このクエリは失敗します。なぜなら、$city をエスケープしてクォートで囲む処理をしていないからです */
+$query = sprintf("SELECT CountryCode FROM City WHERE name='%s'", $city);
+$result = $mysqli->query($query);
+]]>
+
+ &style.procedural;
+
+
+
+ &examples.outputs.similar;
+
+
+
+
+
+
+
+ &reftitle.seealso;
+
+ mysqli::real_escape_string
+ mysqli::set_charset
+
+
+
+
+
diff --git a/reference/mysqli/mysqli/real-escape-string.xml b/reference/mysqli/mysqli/real-escape-string.xml
index 8006d0ac29..8f78f5d540 100644
--- a/reference/mysqli/mysqli/real-escape-string.xml
+++ b/reference/mysqli/mysqli/real-escape-string.xml
@@ -1,6 +1,6 @@
-
+
@@ -23,22 +23,32 @@
stringstring
- この関数を使用して、SQL 文中で使用できる正当な形式の SQL 文字列を作成します。
+ この関数を使用して、SQL 文中で使用できる正しい形式の SQL 文字列を作成します。
文字列 escapestr が、エスケープされた
SQL に変換されます。その際、接続で使用している現在の文字セットが考慮されます。
セキュリティ: デフォルトの文字セット
- サーバーレベルで設定するなり API 関数
- mysqli_set_charset を使うなりして、
- 文字セットを明示しておく必要があります。この文字セットが
- mysqli_real_escape_string
- に影響を及ぼします。詳細は
+ 文字セットは、サーバーレベルか API 関数
+ mysqli_set_charset のどちらかで設定しないと、
+ mysqli_real_escape_string に反映されません。詳細は
文字セットの概念
を参照ください。
+
+
+ この関数は結果をクォートで囲まないため、呼び出し側で囲む必要があります。
+ 接続で NO_BACKSLASH_ESCAPES SQL モードが有効になっている場合、
+ エスケープされるのはシングルクォート (') だけです。
+ そのため、値をダブルクォート (") で囲むと、
+ 文字列が途中で終わってしまい、SQL インジェクションにつながるおそれがあります。
+ 代わりに プリペアドステートメント
+ を使ってください。それができない場合は、結果を常にシングルクォートで囲む
+ mysqli::quote_string を使ってください。
+
+
@@ -52,7 +62,7 @@
エスケープする文字列。
-
+
エンコードされる文字は
NUL (ASCII 0)、
\n、\r、
@@ -60,7 +70,9 @@
"、および
CTRLZ
です。
-
+ 接続で NO_BACKSLASH_ESCAPES SQL モードが有効になっている場合は、
+ ' だけを 2 つ重ねてエンコードします。
+
@@ -133,11 +145,10 @@ Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax
&reftitle.seealso;
-
-
- mysqli_set_charset
-
-
+
+ mysqli_set_charset
+ mysqli_quote_string
+