mysqli::real_escape_string

mysqli_real_escape_string

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

説明

オブジェクト指向型

public string mysqli::real_escape_string(string $string)

手続き型

string mysqli_real_escape_string(mysqli $mysql, 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\'"、および CTRLZ です。

戻り値

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

例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...

参考

  • mysqli_set_charset