• 哈尔滨市“拔钉子”严查露天烧烤 21家冒烟摊位将被依法处罚 2018-05-24
  • 新濠天地娱乐城官网 2018-05-24
  • “澳门368足球博彩公司”足球比分及时直播李国英主持召开省深化医药卫生体制改革领导小组会议 2018-05-23
  • 马来大选92岁前总理改写政治版图 60年来政党首轮替 2018-05-23
  • 科技创新技能挑战赛聚焦冬奥主题 2018-05-23
  • 泰国试管婴儿bnh医院技术怎么样,是最好的吗?—海口论坛 2018-05-23
  • 置业指南:买高层要注意这些问题 2018-05-22
  • い羛琩矪堵旧笴眏い瓣笴潦ㄆン 2018-05-22
  • 有力有序有效防范化解煤电产能过剩风险 2018-05-22
  • 美好生活的价值追求和实现路径-社会关注-理论频道-中工网 2018-05-21
  • 保罗亲手为自己圆梦 火箭勇士双双会师西部决赛 2018-05-21
  • Floating production, storage and offloading vessel delivered in Qingdao 2018-05-20
  • 汽車定位跟蹤官員意圖敲詐 追蹤器該怎麼管 2018-05-20
  • 工作队精准发力助力贫困村“摘帽” 2018-05-20
  • 中消协发布榨汁机比较试验结果 2018-05-20
  • 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 已经有了基础想继续深入的人,这本书都很合适。