PHP中addslashes与mysql_escape_string的区别分析

addslashesmysql_escape_string都是用来进行字符串转义的函数,但是有以下区别:

1. addslashes是PHP内置函数,mysql_escape_string是MySQL的API函数。

2. addslashes主要对字符串中的单引号(‘),双引号(“),反斜杠(\)以及NUL(NULL字符)进行转义。mysql_escape_string主要对SQL语句中的元字符如单引号(‘)进行转义。

3. addslashes转义的字符串可以直接用于SQL语句中的字符串字段,而mysql_escape_string转义的字符串需要拼接到SQL语句中。

4. addslashes转义存在由于PHP字符串引用而导致的安全风险,mysql_escape_string方法安全性更高。举个例子:

$str = "Is this O'Reilly's book?";
$str1 = addslashes($str);
echo $str1;   // Is this O\'Reilly\'s book?
$str2 = mysql_escape_string($str);
echo $str2;   // Is this O\'Reilly\\\'s book?    
$sql = "SELECT * FROM books WHERE name = '$str1'";
// Cannot use directly in query
$sql = "SELECT * FROM books WHERE name = '$str2'";
// Can be used in query

所以总结来说:- 如果字符串用于PHP脚本的输出,使用addslashes函数转义更简单。

– 如果字符串直接拼接入SQL语句,为了安全和正确性,应使用mysql_escape_string函数转义。

– 在PHP代码中操作数据库时,尽量使用 Prepared Statements 而不是直接拼接字符串到SQL语句中,这可以避免SQL注入。Prepared Statements示例:

$sql = "SELECT * FROM books WHERE name = ?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "s", $str); 
mysqli_stmt_execute($stmt);

这是目前比较安全的在PHP操作MySQL的方法。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论