如何使用mysqli_real_escape_string()?

时间:2010-12-12 03:34:01

标签: php mysql database mysqli

当我回应: mysqli_real_escape_string($ dbc,'“conn”e“cting”');

在我的远程和本地服务器上输出:\“conn \”e \“cting \”

它应该是怎么回事,但问题是,它在本地数据库中保存[“conn”e“cting”]数据库,同时保存[\“conn \”e \“cting \”]后斜杠到我的远程数据库。我应该配置我的远程数据库吗?怎么样?我正在使用nearfreespeech的服务。

谢谢!

3 个答案:

答案 0 :(得分:4)

您的远程php.ini已启用magic quotes

您可以通过运行来检查......

var_dump(get_magic_quotes_gpc()); // True means it is enabled

它将逃脱所有GET,POST&自动COOKIE超级全局 - 但随后再次转义会留下一个将插入的斜杠。

禁用服务器上的魔术引号,或者如果无法禁用它们,请使用魔术引号禁用功能。

更新

对于它的地狱,这是我刚刚编造的一个

if (get_magic_quotes_gpc()) {

   function stripSlashesRecursive($array) {
       $stripped = array();
       foreach($array as $key => $member) {
          if (is_array($member)) {
             $stripped[stripslashes($key)] = stripSlashesRecursive($member);
          } else {
              $stripped[stripslashes($key)] = stripslashes($member);
          }
       }

       return $stripped;
    }

    $globals = array('_GET', '_POST', '_COOKIE', '_REQUEST');

    foreach($globals as $global) {
       $$global = stripSlashesRecursive($$global);
    }



}

It works!

答案 1 :(得分:1)

如果你正在运行PHP 5.3,这应该可以解决问题:

if ((get_magic_quotes_gpc() === 1) && (version_compare(PHP_VERSION, '5.3.0', '>=') === true))
{
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS | JSON_HEX_QUOT)), true);
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS | JSON_HEX_QUOT)), true);
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS | JSON_HEX_QUOT)), true);
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS | JSON_HEX_QUOT)), true);
}

答案 2 :(得分:0)

我认为更简单的解决方案是在脚本中将运行时魔术引号的php.ini指令设置为0,如下所示:

ini_set('magic_quotes_runtime', '0');

Magic_quotes_gpc是一个单独的指令,仅适用于Get / Post / Cookie操作Axil。 ini_set()函数可用于临时更改php.ini设置(脚本的生命周期)。它将确保您在所有服务器上获得相同的行为。参数是您要设置的指令的名称和新值,两者都是字符串形式。

祝你好运!