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)前連接的字符集,對(duì)于 SQL 語(yǔ)句中的特殊字符進(jìn)行轉(zhuǎn)義

說(shuō)明

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

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

過(guò)程化風(fēng)格

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

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

警告

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

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

參數(shù)

mysql

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

escapestr

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

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

返回值

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

錯(cuò)誤/異常

在無(wú)效的連接上調(diào)用此函數(shù)會(huì)返回 null 并發(fā)出一個(gè) E_WARNING 級(jí)別的錯(cuò)誤。

范例

示例 #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";

/* 由于未對(duì) $city 進(jìn)行轉(zhuǎn)義,此次查詢會(huì)失敗 */
if (!$mysqli->query("INSERT into myCity (Name) VALUES ('$city')")) {
    
printf("Error: %s\n"$mysqli->sqlstate);
}

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

/* 對(duì) $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();
?>

過(guò)程化風(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";

/* 由于未對(duì) $city 進(jìn)行轉(zhuǎn)義,此次查詢會(huì)失敗 */
if (!mysqli_query($link"INSERT into myCity (Name) VALUES ('$city')")) {
    
printf("Error: %s\n"mysqli_sqlstate($link));
}

$city mysqli_real_escape_string($link$city);

/* 對(duì) $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);
?>

以上例程會(huì)輸出:

Error: 42000
1 Row inserted.

注釋

注意:

如果你之前都是使用 mysql_real_escape_string() 函數(shù)來(lái)轉(zhuǎn)義 SQL 語(yǔ)句的, 那么需要注意的是 mysqli_real_escape_string()mysql_real_escape_string() 兩個(gè)函數(shù)的參數(shù)順序不同。 mysqli_real_escape_string() 中, link 是第一個(gè)參數(shù), 而在 mysql_real_escape_string() 函數(shù)中,要轉(zhuǎn)義的字符串是第一個(gè)參數(shù)。

參見