mysql_real_escape_string与mysqli_real_escape_string
时间: 2023-09-18 12:07:30 浏览: 148
`mysql_real_escape_string` 和 `mysqli_real_escape_string` 都是用于防止 SQL 注入的函数,但是它们有一些区别。
`mysql_real_escape_string` 是用于 MySQL 扩展库的函数,它可以将某些特殊字符(例如单引号、双引号等)在 SQL 语句中的含义进行转义,以避免 SQL 注入攻击。但是这个函数已经被废弃,不建议使用。
`mysqli_real_escape_string` 是用于 MySQLi 扩展库的函数。和 `mysql_real_escape_string` 类似,它也是将特殊字符进行转义。不同的是,它需要连接到数据库才能使用,并且支持多个字符集。
总的来说,如果你使用的是 MySQLi 扩展库,应该使用 `mysqli_real_escape_string` 函数来防止 SQL 注入攻击。不建议使用 `mysql_real_escape_string`。另外,更好的方式是使用预处理语句来执行 SQL 查询。
相关问题
if(!function_exists('mysql_pconnect')){ function mysql_pconnect($dbhost, $dbuser, $dbpass){ global $dbport; global $dbname; global $linkid; $linkid = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); return $linkid; } function mysql_select_db($dbname){ global $linkid; return mysqli_select_db($linkid,$dbname); } function mysql_fetch_array($result, $type=''){ if ($type) { return mysqli_fetch_array($result, $type); }else{ return mysqli_fetch_array($result); } } function mysql_fetch_assoc($result){ return mysqli_fetch_assoc($result); } function mysql_fetch_row($result){ return mysqli_fetch_row($result); } function mysql_free_result($result){ return mysqli_free_result($result); } function mysql_query($cxn){ global $linkid; return mysqli_query($linkid,$cxn); } function mysql_insert_id(){ global $linkid; return mysqli_insert_id($linkid); } function mysql_affected_rows(){ global $linkid; return mysqli_affected_rows($linkid); } function mysql_escape_string($data){ global $linkid; return mysqli_real_escape_string($linkid, $data); } function mysql_real_escape_string($data){ global $linkid; return mysqli_real_escape_string($linkid, $data); } function mysql_close(){ global $linkid; return mysqli_close($linkid); } function mysql_get_server_info(){ global $linkid; return mysqli_get_server_info($linkid); } function mysql_num_rows($result){ return mysqli_num_rows($result); } } error_reporting(E_ERROR | E_PARSE); error_reporting(E_ALL ^ E_WARNING); error_reporting(E_ALL & ~E_NOTICE); error_reporting(E_ALL ^ E_DEPRECATED);给代码加上注释
以下是对代码的注释:
```php
if(!function_exists('mysql_pconnect')){
// 自定义 mysql_pconnect 函数
function mysql_pconnect($dbhost, $dbuser, $dbpass){
// 全局变量
global $dbport;
global $dbname;
global $linkid;
// 使用 mysqli_connect 连接数据库
$linkid = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
return $linkid;
}
// 自定义 mysql_select_db 函数
function mysql_select_db($dbname){
// 全局变量
global $linkid;
// 使用 mysqli_select_db 选择数据库
return mysqli_select_db($linkid,$dbname);
}
// 自定义 mysql_fetch_array 函数
function mysql_fetch_array($result, $type=''){
// 如果传入 $type,则使用 mysqli_fetch_array 函数并返回
if ($type) {
return mysqli_fetch_array($result, $type);
}
// 否则使用 mysqli_fetch_array 函数并返回
else{
return mysqli_fetch_array($result);
}
}
// 自定义 mysql_fetch_assoc 函数
function mysql_fetch_assoc($result){
return mysqli_fetch_assoc($result);
}
// 自定义 mysql_fetch_row 函数
function mysql_fetch_row($result){
return mysqli_fetch_row($result);
}
// 自定义 mysql_free_result 函数
function mysql_free_result($result){
return mysqli_free_result($result);
}
// 自定义 mysql_query 函数
function mysql_query($cxn){
// 全局变量
global $linkid;
// 使用 mysqli_query 函数查询数据库
return mysqli_query($linkid,$cxn);
}
// 自定义 mysql_insert_id 函数
function mysql_insert_id(){
// 全局变量
global $linkid;
// 使用 mysqli_insert_id 函数获取最后插入的 ID
return mysqli_insert_id($linkid);
}
// 自定义 mysql_affected_rows 函数
function mysql_affected_rows(){
// 全局变量
global $linkid;
// 使用 mysqli_affected_rows 函数获取受影响的行数
return mysqli_affected_rows($linkid);
}
// 自定义 mysql_escape_string 函数
function mysql_escape_string($data){
// 全局变量
global $linkid;
// 使用 mysqli_real_escape_string 函数转义字符串
return mysqli_real_escape_string($linkid, $data);
}
// 自定义 mysql_real_escape_string 函数
function mysql_real_escape_string($data){
// 全局变量
global $linkid;
// 使用 mysqli_real_escape_string 函数转义字符串
return mysqli_real_escape_string($linkid, $data);
}
// 自定义 mysql_close 函数
function mysql_close(){
// 全局变量
global $linkid;
// 使用 mysqli_close 函数关闭连接
return mysqli_close($linkid);
}
// 自定义 mysql_get_server_info 函数
function mysql_get_server_info(){
// 全局变量
global $linkid;
// 使用 mysqli_get_server_info 函数获取 MySQL 服务器信息
return mysqli_get_server_info($linkid);
}
// 自定义 mysql_num_rows 函数
function mysql_num_rows($result){
// 使用 mysqli_num_rows 函数获取结果集中的行数
return mysqli_num_rows($result);
}
}
// 设置错误报告级别
error_reporting(E_ERROR | E_PARSE); // 不显示警告和通知
error_reporting(E_ALL ^ E_WARNING); // 显示错误和通知,不显示警告
error_reporting(E_ALL & ~E_NOTICE); // 显示错误和警告,不显示通知
error_reporting(E_ALL ^ E_DEPRECATED); // 显示错误和通知,不显示弃用的函数警告
```
注释是用来解释代码的作用和意图,方便其他开发人员理解和维护代码。
mysqli_real_escape_string
mysqli_real_escape_string是一个PHP函数,用于将字符串中的特殊字符转义,以便在MySQL查询中安全地使用。它接受两个参数,第一个参数是MySQL数据库连接对象,第二个参数是要转义的字符串。
例如,如果您要向MySQL数据库中的表中插入一个包含单引号的字符串,您可以使用mysqli_real_escape_string函数来转义该字符串,以防止出现语法错误或SQL注入攻击。
以下是一个示例代码:
```
// 创建数据库连接对象
$conn = mysqli_connect("localhost", "username", "password", "dbname");
// 要插入的字符串
$str = "I'm a string with a single quote.";
// 转义字符串
$str = mysqli_real_escape_string($conn, $str);
// 执行插入操作
mysqli_query($conn, "INSERT INTO mytable (mycolumn) VALUES ('$str')");
```
在上面的例子中,mysqli_real_escape_string函数用于转义字符串,以便能够安全地将其插入MySQL表中的某一列。
阅读全文