mysql_real_escape_string和mysql_escape_string有什么本质的区别,有什么用处,为什么被弃用?

mysql_real_escape_string和mysql_escape_string有什么本质的区别,有什么用处,为什么被弃用?

1.官方说明:

1.1 mysql_real_escape_string

(PHP 4 >= 4.3.0, PHP 5)

mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集

Warning

本扩展自 PHP 5.5.0 起已废弃,并在自 PHP 7.0.0 开始被移除。应使用 MySQLi或 PDO_MySQL扩展来替换之。参见 [MySQL:选择 API]) 指南以及相关 FAQ 来获取更多信息。用以替代本函数的有:

  • mysqli_real_escape_string()

  • PDO::quote()

mysql_real_escape_string( string $unescaped_string [, resource $link_identifier = NULL ] ) : string

本函数将 unescaped_string 中的特殊字符转义,并接收连接的当前字符集,因此可以安全用于 mysql_query()

mysql_real_escape_string() 调用mysql库的函数mysql_real_escape_string, 在以下字符前添加反斜杠: \x00, \n, \r, **, ', " 和 \x1a.

为了安全起见,在像MySQL传送查询前,必须调用这个函数(除了少数例外情况)。

参数说明

unescaped_string

The string that is to be escaped.

link_identifier

MySQL 连接。如不指定连接标识,则使用由 mysql_connect() 最近打开的连接。如果没有找到该连接,会尝试不带参数调用 mysql_connect() 来创建。如没有找到连接或无法建立连接,则会生成 E_WARNING 级别的错误

1.2 mysql_escape_string

(PHP 4 >= 4.0.3, PHP 5)

mysql_escape_string — 转义一个字符串用于 mysql_query

说明

mysql_escape_string ( string $unescaped_string ) : string

本函数将 unescaped_string 转义,使之可以安全用于mysql_query()。

Note: mysql_escape_string() 并不转义%* 和 _。 本函数和mysql_real_escape_string() 完全一样,除了 mysql_real_escape_string() 接受的是一个连接句柄并根据当前字符集转义字符串。mysql_escape_string() 并不接受连接参数,也不管当前字符集设定。

2.用处及区别

通过上面的说明,我们可以知道两者都是为了防止sql注入,对传递的字符串进行转义处理,但两者有一些区别

2.1mysql_real_escape_string:

1.该函数有两个参数,其中第二个参数是MySQL 连接,为选填参数,默认为上一个数据库链接connection

2.使用之前要先连接上数据库,否则会出错

3.在转义字符串的时候,会考虑当前链接connection字符集。

2.2 mysql_escapte_string

mysql_escapte_string仅仅是对字符串进行转义处理,不考虑mysql链接及字符集问题。

请记住,任何转义操作都不一定能避免sql注入的问题,所有转义都永远不足以保护数据库,因为这种转义操作是一种反应式防御机制,它仅修复数据库中非常有限且已知的漏洞

所以适当且唯一(实际上)的防御是一种主动:使用准备好的语句。对准备好的语句的设计要格外小心,以便仅执行有效的和已编程的SQL。如果正确完成,则会大大降低执行意外SQL的可能性。比如PDO msyql 扩展

4.为什么被废弃

其实从官方文档也能得出,主要原因还是涉及到安全的问题,会造成sql注入。

5.拓展:mysql与mysqli的区别

mysqli连接是永久连接,而mysql是非永久连接。

mysqli的面向过程的使用,mysqli的面向对象的使用

mysql连接:每当第二次使用的时候,都会重新打开一个新的进程。 mysqli连接:一直都只使用同一个进程。 mysqli好处可以很大程度的减轻服务器端压力。 当然,如果mysql也需要永久连接的话,就可以使用mysql_pconnect()这个函数

 

posted @ 2021-08-23 20:36  joshua317  阅读(949)  评论(0编辑  收藏  举报