PHP Escape字符串

时间:2016-03-19 18:38:31

标签: php

我对一段代码有一个小问题,我尝试了各种各样的东西,但它不想工作。

   function escape_str($str, $like = FALSE)
    {
        if (is_array($str))
        {
            foreach ($str as $key => $val)
            {
                $str[$key] = $this->escape_str($val, $like);
            }

            return $str;
        }

        if (function_exists('mysqli_real_escape_string') AND is_object($this->conn_id))
        {
             $str = mysqli_real_escape_string($str, $this->conn_id);
        }
        elseif (function_exists('mysql_escape_string'))
        {
            $str = mysql_escape_string($str);
        }
        else
        {
            $str = addslashes($str);
        }

        // escape LIKE condition wildcards
        if ($like === TRUE)
        {
            $str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);
        }

        return $str;
    }

它不断返回错误; mysql_real_escape_string()期望参数2是资源,给定对象 我已经尽力了

1 个答案:

答案 0 :(得分:0)

代码存在多个问题,首先检查函数是否存在,然后调用另一个函数。 其次,查看mysqli_real_escape_string()的文档似乎需要$this->conn作为第一个参数,而string to escape作为第二个参数。

<?php

       if (function_exists('mysqli_real_escape_string') AND is_object($this->conn_id)){
       # ------------------------^
             $str = mysql_real_escape_string($this->conn_id, $str);
             # ---------^^ ?
       }

?>

看来fusion3k有两次打败了我,对不起但是我错过了评论。无论如何,将代码重新组织成一个小问题,这是最终结果。

<?php

   function escape_str($str, $like = FALSE){
    if(is_array($str)){
      foreach ($str as $key => $val){
        $str[$key] = $this->escape_str($val, $like);
      }

      return $str;
    } else {
      if($like){
        $str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);
      }

      if(function_exists('mysqli_real_escape_string') && isset($this->conn_id)){
        return mysqli_real_escape_string($str, $this->conn_id);
      } elseif(function_exists('mysql_escape_string')){
        return mysql_escape_string($str);
      } else {
        return addslashes($str);
      }
    }
  }

?>