CI数据库查询
CodeIgniter (CI) 是一个功能强大的PHP框架,其内置的数据库类提供了丰富的方法和函数来进行数据库操作,本文将详细介绍CI中的常见数据库查询操作,包括查询结果集、条件查询、去重、排序、分页、计数、插入记录、更新和删除等。
一、查询结果集
在CI中,可以使用多种方法获取查询结果集,每种方法返回的结果格式有所不同。
1、result():返回一个对象数组,每个对象代表一条记录,适用于处理多条记录。
$query = $this->db->get('tableName'); $result = $query->result();
2、result_array():返回一个二维数组,每行代表一条记录,适用于处理多条记录。
$query = $this->db->get('tableName'); $result = $query->result_array();
3、row():返回一个对象,表示单条记录,如果查询结果为空,则返回NULL。
$query = $this->db->get('tableName'); $row = $query->row();
4、row_array():返回一个关联数组,表示单条记录,如果查询结果为空,则返回NULL。
$query = $this->db->get('tableName'); $row = $query->row_array();
5、insert_id():获取上一条插入的数据记录的ID值,通常用于自增字段。
$this->db->insert('tableName', $data); $insert_id = $this->db->insert_id();
二、条件查询
CI中的条件查询可以通过多种方式实现,包括简单的条件、复杂的条件组合以及模糊匹配。
1、简单条件:使用where()
方法。
$this->db->where('name', 'Jack')->get('tableName');
2、IN和NOT IN条件:使用where_in()
和where_not_in()
方法。
$ids = [1, 2, 3, 4, 5]; $this->db->where_in('id', $ids)->get('tableName');
3、复杂条件:通过关联数组传递多个条件。
$array = array('name !=' => 'John', 'id <' => 20, 'date >' => '2024-01-01'); $this->db->where($array)->get('tableName');
4、自定义SQL模式:使用where()
方法并传递自定义的SQL字符串。
$where = "name='Joe' AND status='boss' OR status='active'"; $this->db->where($where)->get('tableName');
5、模糊匹配:使用like()
方法,支持前缀、后缀和双向匹配。
$this->db->like('title', 'match', 'before'); // %match $this->db->like('title', 'match', 'after'); // match% $this->db->like('title', 'match', 'both'); // %match%
6、模糊匹配关联数组:使用like()
方法并传递关联数组。
$array = array('title' => $match, 'page1' => $match, 'page2' => $match); $this->db->like($array)->get('tableName');
三、DISTINCT去重
使用distinct()
方法可以去除重复的记录。
$this->db->select('username, grade')->distinct()->get('tableName');
四、排序
使用order_by()
方法对查询结果进行排序。
$this->db->order_by('title DESC, name ASC')->get('tableName');
五、分页
使用limit()
方法实现分页功能。
// 未设置偏移量,默认从第0条开始选择10条数据 $this->db->limit(10)->get('tableName'); // 设置偏移量,从第10条开始选择10条数据 $this->db->limit(10, 10)->get('tableName');
六、计数
使用count_all()
和count_all_results()
方法统计记录数。
// 查询表中总的记录数 $this->db->count_all('tableName'); // 查询符合当前条件的记录数 $this->db->where($array)->from('tableName')->count_all_results();
七、插入记录
使用insert()
方法插入单条或多条记录。
$data = array('title' => 'My title', 'name' => 'My name'); $this->db->insert('tableName', $data); $data = array( array('title' => 'My title1', 'name' => 'My name1'), array('title' => 'My title2', 'name' => 'My name2') ); $this->db->insert_batch('tableName', $data);
八、更新记录
使用update()
方法更新记录。
$data = array('title' => 'My new title', 'name' => 'My new name'); $this->db->where('id', 5)->update('tableName', $data);
九、删除记录
使用delete()
方法删除记录。
$this->db->where('id', $id); $this->db->delete('mytable');
十、统计某一列的值
使用聚合函数统计某一列的值。
$tj_list = $this->game_user_log->instance_total()->select_sum('total');
以下是两个关于CI数据库查询的常见问题及其解答:
Q1: 如何在CodeIgniter中使用JOIN进行多表查询?
A1: CodeIgniter提供了方便的方法来进行多表查询,主要使用join()
,join()
,left_join()
等方法。
$this->db->select('*'); $this->db->from('table1'); $this->db->join('table2', 'table1.id = table2.foreign_key'); $query = $this->db->get(); return $query->result();
在这个例子中,我们选择了table1
中的所有列,并通过table1.id = table2.foreign_key
条件将其与table2
连接起来,可以根据需要选择内连接(INNER JOIN)、左连接(LEFT JOIN)等不同类型的连接方式。
Q2: 如何在CodeIgniter中防止SQL注入攻击?
A2: CodeIgniter的查询构建器类自动地对查询语句进行了过滤和转义,以防止SQL注入攻击,当使用查询构建器创建查询时,不需要额外担心SQL注入问题。
$name = $this->input->post('name'); $this->db->where('name', $name); $query = $this->db->get('users'); return $query->result();
在这个例子中,用户输入的名称被安全地用于查询条件,无需手动转义特殊字符,当直接使用SQL字符串时,应特别注意避免拼接用户输入的内容,而是使用绑定参数的方式。
以上内容就是解答有关“ci 数据库查询”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1491893.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复