MySQL mysql_real_escape_string VS addslashes
在进行 MySQL 数据库开发时,经常会使用到字符串转义的操作,以保证数据能够正确地存储,避免 SQL 注入等问题。MySQL 提供了两种常用的转义函数:mysql_real_escape_string 和 addslashes。虽然它们的作用都是对字符串进行转义,但是它们的细节还是有所不同的。
阅读更多:MySQL 教程
1. mysql_real_escape_string
mysql_real_escape_string 是 MySQL 提供的转义函数,它会按照 MySQL 数据库的规则来对字符串进行转义,并且能够避免 SQL 注入攻击。
$string = "She said, 'I love you.'";
$escaped_string = mysql_real_escape_string($string);
// 输出:She said, \'I love you.\'
在上面的例子中,mysql_real_escape_string 函数对单引号进行了转义,能够避免 SQL 注入攻击。
需要注意的是,mysql_real_escape_string 函数需要一个连接句柄参数,表示要进行转义的字符串所在的数据库连接。所以在使用该函数时,需要先建立好数据库连接。
2. addslashes
addslashes 是 PHP 提供的转义函数,它能够对字符串中的单引号、双引号、反斜线等特殊字符进行转义。
$string = "She said, 'I love you.'";
$escaped_string = addslashes($string);
// 输出:She said, \'I love you.\'
在上面的例子中,addslashes 函数对单引号进行了转义,与 mysql_real_escape_string 的效果是一样的。但是它不需要连接句柄参数,因此在使用时就比较方便。
3. 区别和建议
虽然 mysql_real_escape_string 和 addslashes 都能够对字符串进行转义,但是它们的细节还是有所不同的。
首先,mysql_real_escape_string 只能用于 MySQL 数据库,而 addslashes 可以用于任何 PHP 应用程序。
其次,mysql_real_escape_string 能够避免 SQL 注入攻击,而 addslashes 则不一定能够避免。例如:
$string = "1'; DELETE FROM users; --";
$escaped_string = mysql_real_escape_string($string);
// 输出:1\'; DELETE FROM users; --
在上面的例子中,mysql_real_escape_string 函数对 $string 进行了转义,使得输入的字符串变成了普通的字符串,不会产生 SQL 注入攻击。而如果使用 addslashes,则可能会导致 SQL 注入攻击。
因此,建议在 MySQL 数据库开发中使用 mysql_real_escape_string,而在其他 PHP 应用程序中使用 addslashes。
总结
在 MySQL 数据库开发中,经常会使用到字符串转义的操作,避免 SQL 注入等问题。MySQL 提供了 mysql_real_escape_string 函数,能够避免 SQL 注入攻击,并且需要连接句柄参数,只能用于 MySQL 数据库。PHP 提供了 addslashes 函数,能够对字符串中的单引号、双引号、反斜线等特殊字符进行转义,建议在其他 PHP 应用程序中使用。
极客笔记