加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 没有连接的多字节mysql_real_escape_string?

发布时间:2020-12-13 22:29:51 所属栏目:PHP教程 来源:网络整理
导读:让我们考虑一下我会做的 SET NAMES 'utf8' 到mysql连接(所以我需要多字节转义). 是否有一个安全的替代mysql_real_escape_string不需要mysql连接? 在官方页面中,我发现了一个使用str_replace的comment,如下所示: if(!empty($inp) is_string($inp)) { return
让我们考虑一下我会做的

SET NAMES 'utf8'

到mysql连接(所以我需要多字节转义).

是否有一个安全的替代mysql_real_escape_string不需要mysql连接?

在官方页面中,我发现了一个使用str_replace的comment,如下所示:

if(!empty($inp) && is_string($inp)) { 
    return str_replace(array('',"","n","r","'",'"',"x1a"),array('\','','n','r',"'",'"','Z'),$inp); 
}

这够了吗?

为什么mysql_real_escape_string需要当前的charcaterset,如果它只会逃避相同的值? (如官方页面php.net/mysql_real_escape_string中所述)

谢谢

解决方法

首先,有很多数据库抽象库

(我之前使用过dbFacile:https://github.com/alanszlosek/dbFacile).

sql准备语句也总是一个好主意.

但是对于你的实际问题……

来自这篇文章:Alternative to mysql_real_escape_string without connecting to DB

我真的认为这是一个很好的选择:

public function escape($string) {
    $return = '';
    for($i = 0; $i < strlen($string); ++$i) {
        $char = $string[$i];
        $ord = ord($char);
        if($char !== "'" && $char !== """ && $char !== '' && $ord >= 32 && $ord <= 126)
            $return .= $char;
        else
            $return .= 'x' . dechex($ord);
    }
    return $return;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读