mysqli::real_connect
mysqli::real_query
mysqli
PHP Manual

# mysqli::real_escape_string

# mysqli_real_escape_string

(PHP 5)

mysqli::real_escape_string -- mysqli_real_escape_string — 接続の現在の文字セットを考慮して、SQL 文で使用する文字列の特殊文字をエスケープする

### 説明

オブジェクト指向型

string mysqli::escape_string ( string `$escapestr` )
string mysqli::real_escape_string ( string `$escapestr` )

手続き型

string mysqli_real_escape_string ( mysqli `$link` , string `$escapestr` )

この関数を使用して、SQL 文中で使用できる正当な形式の SQL 文字列を作成します。 文字列 escapestr が、エスケープされた SQL に変換されます。その際、接続で使用している現在の文字セットが考慮されます。

警告

# セキュリティ: デフォルトの文字セット

サーバーレベルで設定するなり API 関数 mysqli_set_charset() を使うなりして、 文字セットを明示しておく必要があります。この文字セットが mysqli_real_escape_string() に影響を及ぼします。詳細は 文字セットの概念 を参照ください。

### パラメータ

`link`

  手続き型のみ: mysqli_connect() あるいは mysqli_init() が返すリンク ID。

`escapestr`

  エスケープする文字列。

  エンコードされる文字は NUL (ASCII 0), \n, \r, \, ', ", および Control-Z です。

### 返り値

エスケープ済みの文字列を返します。

### 例

例1 mysqli::real_escape_string() の例

オブジェクト指向型

`<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* 接続状況をチェックします */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City");
$city = "'s Hertogenbosch";
/* このクエリは失敗します。なぜなら $city をエスケープしていないからです */
if (!$mysqli->query("INSERT into myCity (Name) VALUES ('$city')")) {
printf("Error: %s\n", $mysqli->sqlstate);
}
$city = $mysqli->real_escape_string($city);
/* $city をエスケープしたので、このクエリは正しく動作します */
if ($mysqli->query("INSERT into myCity (Name) VALUES ('$city')")) {
printf("%d Row inserted.\n", $mysqli->affected_rows);
}
$mysqli->close();
?>`

手続き型

`<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* 接続状況をチェックします */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
$city = "'s Hertogenbosch";
/* このクエリは失敗します。なぜなら $city をエスケープしていないからです */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
printf("Error: %s\n", mysqli_sqlstate($link));
}
$city = mysqli_real_escape_string($link, $city);
/* $city をエスケープしたので、このクエリは正しく動作します */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
printf("%d Row inserted.\n", mysqli_affected_rows($link));
}
mysqli_close($link);
?>`

上の例の出力は以下となります。

    Error: 42000
    1 Row inserted.

### 注意

> 注意:

> これまでに mysql_real_escape_string() をよく使っていた人は、 mysqli_real_escape_string() の引数が mysql_real_escape_string() とは違うことに注意しましょう。 mysqli_real_escape_string() の最初の引数は `link` であり、 mysql_real_escape_string() のようにエスケープしたい文字列を最初に書くのではなくなりました。

### 参考

- mysqli_set_charset() - クライアントのデフォルト文字セットを設定する
- mysqli_character_set_name() - データベース接続のデフォルトの文字コードセットを返す

mysqli::real_connect
mysqli::real_query
mysqli
PHP Manual