为启用了魔术引号的系统创建real_escape_string()方法

时间:2015-11-01 00:02:29

标签: php mysql oop mysqli magic-quotes-gpc

我正在学习PHP的书说,为了防止人们使用引号之类的东西来改变查询,你应该使用real_escape_string函数。然后作者接着说,在一些旧的系统上,启用了魔术引号,使用real_escape_string可能最终会双重转义一些字符,所以他创建了这个函数:

<?php
    function mysql_fix_string($conn, $string) {
        if (get_magic_quotes_gpc()) $string = stripslashes($string);
        return $conn->real_escape_string($string);
    }
?>

将它转换为mysqli类的扩展类中的方法是否可以? (除了我想尽可能少地传递参数之外,我没有任何真正的理由。)

如果是这样,这是正确的方法吗?

class mysqli_extended extends mysqli {
    public function fix_string($string) {
        if(get_magic_quotes_gpc()) {
            $string = stripslashes($string);
        }
        return $this->real_escape_string($string);
    }
} 

这是一种静态方法更有意义的情况吗?如果是这样,它怎么能被重写为静态方法,如果没有,那么为什么呢?

<小时/> 由于我刚问过一百万个问题,我将在这里总结一下:

  1. 是否可以为此目的创建方法。 (这有什么缺点吗?)
  2. 上述代码是否正确?
  3. 它应该是静态方法吗?
  4. 你会如何使它成为静态方法?

1 个答案:

答案 0 :(得分:1)

魔术引号自php 5.3起已被弃用,并在5.4中删除。我推荐learn php the right way