(PHP 5, PHP 7, PHP 8)
mysqli::real_escape_string -- mysqli_real_escape_string — 接続の現在の文字セットを考慮して、SQL 文で使用する文字列の特殊文字をエスケープする
オブジェクト指向型
$string
): string手続き型
この関数を使用して、SQL 文中で使用できる正当な形式の SQL 文字列を作成します。
文字列 escapestr
が、エスケープされた
SQL に変換されます。その際、接続で使用している現在の文字セットが考慮されます。
サーバーレベルで設定するなり API 関数 mysqli_set_charset() を使うなりして、 文字セットを明示しておく必要があります。この文字セットが mysqli_real_escape_string() に影響を及ぼします。詳細は 文字セットの概念 を参照ください。
link
手続き型のみ: mysqli_connect() あるいは mysqli_init() が返す mysqliオブジェクト。
string
エスケープする文字列。
エンコードされる文字は NUL (ASCII 0), \n, \r, \, ', ", および
Control-Z
です。
エスケープ済みの文字列を返します。
例1 mysqli::real_escape_string() の例
オブジェクト指向型
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$city = "'s-Hertogenbosch";
/* $city はエスケープされ、クエリは動作します。*/
$query = sprintf("SELECT CountryCode FROM City WHERE name='%s'",
$mysqli->real_escape_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);
手続き型
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect("localhost", "my_user", "my_password", "world");
$city = "'s-Hertogenbosch";
/* $city はエスケープされ、クエリは動作します。*/
$query = sprintf("SELECT CountryCode FROM City WHERE name='%s'",
mysqli_real_escape_string($mysqli, $city));
$result = mysqli_query($mysqli, $query);
printf("Select returned %d rows.\n", mysqli_num_rows($result));
/* このクエリは失敗します。なぜなら、$city をエスケープしていないからです */
$query = sprintf("SELECT CountryCode FROM City WHERE name='%s'", $city);
$result = mysqli_query($mysqli, $query);
上の例の出力は、 たとえば以下のようになります。
Select returned 1 rows. Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's-Hertogenbosch'' at line 1 in...