无需连接到 DB 即可替代mysql_real_escape_string

2022-08-30 07:46:26

我希望有一个函数在没有连接到数据库的情况下表现得像mysql_real_escape_string,因为有时我需要在没有数据库连接的情况下进行干测试。mysql_escape_string已被弃用,因此是不可取的。我的一些发现:

http://www.gamedev.net/community/forums/topic.asp?topic_id=448909

http://w3schools.invisionzone.com/index.php?showtopic=20064


答案 1

如果没有 DB 连接,就不可能安全地转义字符串。 预准备语句需要连接到数据库,以便它们可以使用适当的字符集转义字符串 - 否则使用多字节字符仍然可以进行SQL注入攻击。mysql_real_escape_string()

如果您只是在测试,那么您也可以使用 ,它不能100%保证免受SQL注入攻击,但是如果没有数据库连接,就不可能构建更安全的东西。mysql_escape_string()


答案 2

好吧,根据mysql_real_escape_string函数参考页面:“mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,该函数转义了以下字符:\x00,\n,\r,\,',”和\x1a。

考虑到这一点,那么您发布的第二个链接中给出的函数应该完全符合您的要求:

function mres($value)
{
    $search = array("\\",  "\x00", "\n",  "\r",  "'",  '"', "\x1a");
    $replace = array("\\\\","\\0","\\n", "\\r", "\'", '\"', "\\Z");

    return str_replace($search, $replace, $value);
}

推荐