mysqli::real_escape_string

mysqli_real_escape_string

(PHP 5, PHP 7, PHP 8)

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

説明

オブジェクト指向型

public mysqli::real_escape_string(string $string): string

手続き型

mysqli_real_escape_string(mysqli $mysql, string $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...

参考

関連キーワード:  mysqli, string, 文字, セット, エスケープ, 接続, 考慮, escape, 使用,