downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

mysqli::real_query> <mysqli::real_connect
[edit] Last updated: Fri, 07 Jun 2013

view this page in

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::real_query> <mysqli::real_connect
[edit] Last updated: Fri, 07 Jun 2013
 
add a note add a note User Contributed Notes mysqli::real_escape_string - [5 notes]
up
6
arnoud at procurios dot nl
8 years ago
Note that this function will NOT escape _ (underscore) and % (percent) signs, which have special meanings in LIKE clauses.

As far as I know there is no function to do this, so you have to escape them yourself by adding a backslash in front of them.
up
2
Josef Toman
3 years ago
For percent sign and underscore I use this:
<?php
$more_escaped
= addcslashes($escaped, '%_');
?>
up
6
tobias_demuth at web dot de
7 years ago
Note, that if no connection is open, mysqli_real_escape_string() will return an empty string!
up
2
dave at mausner.us
2 years ago
You can avoid all character escaping issues (on the PHP side) if you use prepare() and bind_param(), as an alternative to placing arbitrary string values in SQL statements.  This works because bound parameter values are NOT passed via the SQL statement syntax.
up
0
vita dot plachy at seznam dot cz
5 years ago
The above can be managed by the following function:

<?php
function search_escape($str, $char = '\\')
{
    return
ereg_replace('[%_]', $char . '\0', $str);
}
?>

 
show source | credits | sitemap | contact | advertising | mirror sites