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

标签 php mysql escaping

让我们考虑一下我将永远做一个

SET NAMES 'utf8'

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

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

在官方页面我发现了一个comment像这样使用 str_replace:

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

够了吗?

如果 mysql_real_escape_string 只会转义相同的值,为什么它需要当前字符集? (如官方页面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;
}

关于php - 没有连接的多字节的mysql_real_escape_string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4892882/

相关文章:

javascript - 谷歌 API 折线图

Ruby:如何用方括号 [ 和 ] 转义 url?

c# - 为什么在字符串中使用引号的javascript转义字符需要\\' instead of\'

php - 为什么我不能在我的 mysql 数据库中查看外语字符?

php - Laravel Dusk - 类配置不存在

php登录错误 密码或用户名错误

terminal - 通过 ANSI 转义序列或 X11 转义序列禁用回显并设置原始终端模式

MySQL 上的 PHP PDO 查询未按预期返回

php - C++ 'php_sprintf' 如何返回这个值?

mysql - Magento 禁用没有图像的产品