php / mysql真正的逃脱和特殊字符

时间:2013-08-30 01:42:24

标签: php mysql insert special-characters

为了防止在执行查询之前的SQL注入攻击(包括INSERT攻击)我正在使用mysql_real_escape_string

问题是,如果要输入的数据中包含特殊字符,MYSQL似乎在插入时将斜杠插入数据库。

然后,当我在网页上显示该字段时,会出现斜杠。

理想情况下,我不希望在dbase表中的特殊字符之前加斜杠,因为在显示数据等时需要进行大量的持续维护以删除斜杠。

无论如何都存储在数据库中而不包括反斜杠?

作为一个例子:

$field = "bob's data";
...establish database connection
$field = mysql_real_escape_string($field);
$sql="INSERT INTO table (field) VALUES ('$field')";
if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }

将“bob的数据”放入数据库中。

无论如何都要以不同的方式处理它,以免最终在数据库中出现斜杠?

注意:我知道做qureris的首选方法是使用参数化查询或pdo但由于各种原因,在这个实例中不能这样做,因为它是巨大的遗留网站。

提前感谢您提出任何建议。

1 个答案:

答案 0 :(得分:0)

我认为你可以在处理任何GET,POST,COOKIE或REQUEST对象之前使用类似的东西。

function removeMagiQuotes()
{
if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}
}