• 【2018夏季达沃斯】未来就业报告发布:机器将比人更“能干” 哪些职位更“吃香”? 2018-09-19
  • 西安市民:本想买点香菜吃火锅?比较后还是买了些肉 2018-09-19
  • 安吉发布乡村治理标准规范 2018-09-19
  • 华北能源监管局开展电网运行风险管控专项督查 2018-09-18
  • 马来西亚新山依斯干达特区吸资2531亿马币 ——凤凰网房产马来西亚 2018-09-18
  • 繁星戏剧挑战浸没式独角戏 2018-09-18
  • 领导干部自然资源资产离任审计制度试点 让福建省光泽县绿意盎然(图)-地方新闻-时政频道-中工网 2018-09-08
  • 人民日报评留美生数落父母:为亲情拓对话空间 2018-09-07
  • 网友给四川省委书记、省长留言获回复 共计25条 2018-09-07
  • 娱乐城新优惠 2018-09-06
  • 无人售货架现身出租车内 乘客扫码付款随时取走零食 2018-09-06
  • 江西公布拖欠劳动报酬典型案例 最高拖欠近200万元 2018-09-06
  • 做学习宣传贯彻人民领袖思想的排头兵 2018-09-06
  • 华夏幸福荣获2018中国品牌先锋大奖之杰出企业奖 2018-09-05
  • 10大路口因礼让斑马线致堵 济南交警推新规约束行人 ——凤凰网房产济南 2018-09-05
  • CodeIgniter 转义查询

    栏目: CI 发布于: 2013-08-21 16:13:35

    CodeIgniter 框架提供了 Active Record 模式来对数据库进行操作,自己也比较喜欢这种操作数据库的方式,因为通过这种方式进行数据库操作系统会自动对数据进行转义过滤,可以帮助我们进行安全的数据库操作。

    但是Active Record 在数据查询方面个人觉得反而没有直接自己书写SQL语句来得方便,不好的就是使用自己的SQL语句进行查询系统默认没有对数据进行一些安全方面的操作,需要我们自己手动去进行一些安全过滤操作,这时我们就需要使用到转义查询。

    将数据转义以后提交到你的数据库是非常好的安全做法,CodeIgniter 提供了 3 个函数帮助你完成这个工作。

    1、$this->db->escape() 这个函数将会确定数据类型,以便仅对字符串类型数据进行转义。并且,它也会自动把数据用单引号括起来,所以你不必手动添加单引号

    用法如下:

    $sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
    查看函数源码:

    function escape($str)
    {
    	if (is_string($str))
    	{
    		$str = "'".$this->escape_str($str)."'";
    	}
    	elseif (is_bool($str))
    	{
    		$str = ($str === FALSE) ? 0 : 1;
    	}
    	elseif (is_null($str))
    	{
    		$str = 'NULL';
    	}
    
    	return $str;
    }

    2、$this->db->escape_str() 此函数将忽略数据类型对传入数据进行转义。更多时候你将使用上面的函数而不是这个。

    这个函数的使用方法是: 

    $sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
    查看函数源码:
    /**
     * Escape String
     *
     * @access	public
     * @param	string
     * @param	bool	whether or not the string will be used in a LIKE condition
     * @return	string
     */
    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('mysql_real_escape_string') AND is_resource($this->conn_id))
    	{
    		$str = mysql_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;
    }
    
    3、$this->db->escape_like_str() This method should be used when strings are to be used in LIKE conditions so that LIKE wildcards ('%', '_') in the string are also properly escaped. 

    使用示例:

    $search = '20% raise';
    $sql = "SELECT id FROM table WHERE column LIKE '%".$this->db->escape_like_str($search)."%'";
    查看源码:
    function escape_like_str($str)
    {
    	return $this->escape_str($str, TRUE);
    }
    我们可以看到,第一种和第三种方法其实都是调用了第二种方法。
    本站文章除注明转载外,均为本站原创或编译?;队魏涡问降淖?,但请务必注明出处。
    转载请注明:文章转载自 七星彩票平台
    本文标题:CodeIgniter 转义查询
    IT技术书籍推荐:
    PHP编程(第3版)
    PHP编程(第3版)
    凯文·塔特罗 (Kevin Tatroe) (作者), 彼得·麦金太尔 (Peter MacIntyre) (作者), 拉斯马斯·勒多夫 (Rasmus Lerdorf) (作者), 赵戈戈 (译者), 易国磐 (译者), 张鹏飞 (译者)
    这是一本可以让读者深入了解PHP 技术的书籍,作者用言简意赅的语言并结合了大量实例来解释每一个要素。本书涵盖了PHP 所有基本的要点,不管你是一个想从头开始学习PHP的人,还是对PHP 已经有了基础想继续深入的人,这本书都很合适。