博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
雷林鹏分享:CodeIgniter 转义查询
阅读量:6756 次
发布时间:2019-06-26

本文共 2199 字,大约阅读时间需要 7 分钟。

  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);

  }

  我们可以看到,第一种和第三种方法其实都是调用了第二种方法。

  文章转载自 [http://www.php230.com](编辑:雷林鹏 来源:网络 侵删)

转载于:https://www.cnblogs.com/linpeng1/p/10869099.html

你可能感兴趣的文章
Ceres-Solver库入门
查看>>
悲惨而又丢人的创业经历:草根创业者含恨倾诉为什么失败
查看>>
理解WebKit和Chromium: WebKit, WebKit2, Chromium和Chrome介绍
查看>>
hanoi塔的递归算法
查看>>
C# 校验给定的ip地址是否合法
查看>>
lumen 登陆 注册 demo
查看>>
基于服务的并行系统的通讯方式探讨
查看>>
设计模式——观察者模式
查看>>
Python多线程 简明例子
查看>>
《地球上的星星》
查看>>
mysql数据库的主从同步,实现读写分离
查看>>
89 fcanf和fprintf
查看>>
javascript——自定义右键菜单
查看>>
求二叉树中相差最大的两个节点间的差值绝对值
查看>>
PHP 类名::class含义
查看>>
设计模式简介和分类,重点在总结
查看>>
数据库默认端口
查看>>
前端框架的区别,优缺点。
查看>>
oracle中使用sql语句创建表空间、用户、授权及使用命令导入导出
查看>>
layout中加载gif图片
查看>>