mysqli::real_escape_string

mysqli::escape_string

mysqli_real_escape_string

(PHP 5, PHP 7, PHP 8)

mysqli::real_escape_string -- mysqli::escape_string -- mysqli_real_escape_string根據(jù)當(dāng)前連接的字符集,對于 SQL 語句中的特殊字符進(jìn)行轉(zhuǎn)義

說明

面向?qū)ο箫L(fēng)格

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

過程化風(fēng)格

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

此函數(shù)用來對字符串中的特殊字符進(jìn)行轉(zhuǎn)義, 以使得這個字符串是一個合法的 SQL 語句。 傳入的字符串會根據(jù)當(dāng)前連接的字符集進(jìn)行轉(zhuǎn)義,得到一個編碼后的合法的 SQL 語句。

警告

安全:默認(rèn)字符集

在調(diào)用 mysqli_real_escape_string() 函數(shù)之前, 必須先通過調(diào)用 mysqli_set_charset() 函數(shù)或者在 MySQL 服務(wù)器端設(shè)置字符集。 更多信息請參考 字符集。

參數(shù)

mysql

僅以過程化樣式:由mysqli_connect()mysqli_init() 返回的 mysqli 對象。

escapestr

需要進(jìn)行轉(zhuǎn)義的字符串。

會被進(jìn)行轉(zhuǎn)義的字符包括: NUL (ASCII 0),\n,\r,\,'," 和 Control-Z.

返回值

轉(zhuǎn)義后的字符串。

錯誤/異常

在無效的連接上調(diào)用此函數(shù)會返回 null 并發(fā)出一個 E_WARNING 級別的錯誤。

范例

示例 #1 mysqli::real_escape_string() 例程

面向?qū)ο箫L(fēng)格

<?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 進(jìn)行轉(zhuǎn)義,此次查詢會失敗 */
if (!$mysqli->query("INSERT into myCity (Name) VALUES ('$city')")) {
    
printf("Error: %s\n"$mysqli->sqlstate);
}

$city $mysqli->real_escape_string($city);

/* 對 $city 進(jìn)行轉(zhuǎn)義之后,查詢可以正常執(zhí)行 */
if ($mysqli->query("INSERT into myCity (Name) VALUES ('$city')")) {
    
printf("%d Row inserted.\n"$mysqli->affected_rows);
}

$mysqli->close();
?>

過程化風(fēng)格

<?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 進(jìn)行轉(zhuǎn)義,此次查詢會失敗 */
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 進(jìn)行轉(zhuǎn)義之后,查詢可以正常執(zhí)行 */
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() 函數(shù)來轉(zhuǎn)義 SQL 語句的, 那么需要注意的是 mysqli_real_escape_string()mysql_real_escape_string() 兩個函數(shù)的參數(shù)順序不同。 mysqli_real_escape_string() 中, link 是第一個參數(shù), 而在 mysql_real_escape_string() 函數(shù)中,要轉(zhuǎn)義的字符串是第一個參數(shù)。

參見