Php/docs/mysqli.real-escape-string
mysqli::real_escape_string
mysqli::escape_string
mysqli_real_escape_string
(PHP 5, PHP 7)
mysqli::real_escape_string -- mysqli::escape_string -- mysqli_real_escape_string — 根据当前连接的字符集,对于 SQL 语句中的特殊字符进行转义
说明
面向对象风格
mysqli::escape_string
( string $escapestr
) : string
mysqli::real_escape_string
( string $escapestr
) : string
过程化风格
mysqli_real_escape_string
( mysqli $link
, string $escapestr
) : string
此函数用来对字符串中的特殊字符进行转义, 以使得这个字符串是一个合法的 SQL 语句。 传入的字符串会根据当前连接的字符集进行转义,得到一个编码后的合法的 SQL 语句。
Caution 在调用 mysqli_real_escape_string() 函数之前, 必须先通过调用 mysqli_set_charset() 函数或者在 MySQL 服务器端设置字符集。 更多信息请参考 字符集。
参数
link
仅以过程化样式:由mysqli_connect() 或 mysqli_init() 返回的链接标识。
escapestr
需要进行转义的字符串。
会被进行转义的字符包括:
NUL (ASCII 0),\n,\r,\,'," 和 Control-Z
.
返回值
转义后的字符串。
错误/异常
在无效的连接上调用此函数会返回
null
并发出一个 E_WARNING
级别的错误。
范例
Example #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.
注释
Note:
如果你之前都是使用 mysql_real_escape_string() 函数来转义 SQL 语句的, 那么需要注意的是 mysqli_real_escape_string() 和 mysql_real_escape_string() 两个函数的参数顺序不同。 mysqli_real_escape_string() 中,
link
是第一个参数, 而在 mysql_real_escape_string() 函数中,要转义的字符串是第一个参数。